[英]Can I legally write to the data pointed to by a constant vector, e.g. sort it?
[英]Encrypting constant strings(e.g. Password) in compiled executable
我創建了一個需要數據庫才能顯示信息的應用程序。 非常重要的是,沒有密碼的任何人都不能訪問數據庫。
但是,當我瀏覽可執行文件時,發現數據庫密碼是純文本格式。
這是我的代碼:
char pass[20]="MyPassword";
ui->setupUi(this);
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL3");
db.setConnectOptions();
db.setHostName("localhost");
db.setDatabaseName("DB");
db.setUserName("root");
db.setPassword(pass);
這是我在.exe二進制文件中找到的內容:
p< S | t¼ t¬ ? @ € 0 @ € À 0 @ € MyPassword QMYSQL3 localhost DB
這有點令人擔憂。 是否有解決方法,以便我的密碼也得到加密?
通常,在應用程序中存儲密碼是一個非常糟糕的主意。
如user1520427所示,即使您加密了密碼,也必須在代碼中的某處解密它。 這意味着,它出現在內存中的某個位置。
堅定的黑客可以獲取此信息。
通過加密,使黑客的生活更加困難。
因此,您應該知道,如果絕對沒有人可以訪問您的數據庫,則在應用程序中存儲密碼永遠都不安全。 沒有加密可以防止這種情況。
應用某些技術可能會使黑客的生活更加困難:
.exe
可讀性,但請放心,黑客的眼睛是訓練有素的,可以直接識別哈希值。 將密碼分成幾段
這導致密碼在.exe中分發
QString part1 = "ace12" ... somewhere else QString part2 = "32ef0" ... and so on ... somewhere else QString password = part1 + part2
您甚至可以在這些零件上附加一些垃圾,例如
QString part1 = "ace12acaae2b1ccc0e969709665bc62f"
QString part2 = "32ef031ec4b7ad76b6270bd8c8f971d0"
...
QString password = part1.leftRef(5) + part2.leftRef(5) + ...
3.不要以root
身份登錄
只要黑客能夠破解密碼,他就可以立即對數據庫進行root訪問。
4.使用與數據庫服務器的SSL連接。
即使有上述所有技巧,簡單的網絡嗅探器也可以顯示密碼。 因此,請務必同時保護連接。
這些是外行的方法,並保證會被堅定的黑客破解。
如果您確實真的想安全,那么您需要使用SSO解決方案(請參閱https://www.mysql.com/products/enterprise/security.html )。 這是正確執行此操作的唯一方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.