我创建了一个需要数据库来显示信息的应用程序。没有密码的人可以访问数据库是非常必要的。
但是当我查看我的可执行文件时,我发现数据库密码是纯文本的。
这是我的代码:
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
这有点令人担忧。是否有解决方法以便我的密码也被加密?
答案 0 :(得分:1)
在应用程序中存储密码通常是一个非常糟糕的主意 正如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)。这是正确执行此操作的唯一方法。