CXX.SV.PWD.PLAIN

该应用程序不得以明文形式显示密码/PIN

当应用程序尝试使用纯文本格式的字符串来设置密码或 PIN 时,Klocwork 会报告 CXX.SV.PWD.PLAIN 缺陷。

漏洞与风险

如果存储位置或网络未受外部加密保护,则任何可以访问字符串的人员都能查看密码。

在身份验证过程中,如果用户提供纯文本格式的密码或 PIN,恶意行为者可以拦截该数据,从而损害用户帐户的安全性。

缓解与预防

可使用加密技术抵御此类攻击。例如,QT 框架提供名为 encryptToString 的 API,用于加密纯文本字符串。

漏洞代码示例

复制
void Database::connect(Ui::MainWindow *ui){
    /* Set connections */
    this->qSqlDatabase.setUserName("mojito");
    this->qSqlDatabase.setPassword("J0a1m8");
}

Klocwork 在第 4 行报告了 CXX.SV.PWD.PLAIN 缺陷,指出“尝试使用纯文本字符串设置密码。请考虑使用加密技术对纯文本字符串进行加密。”在 Database::connect 方法中,纯文本字符串“J0a1m8”直接传递给了 setPassword API。

修正代码示例

复制
void Database::connect(Ui::MainWindow *ui){
    /* Set connections */
    QString pwd = "J0a1m8";
    QString encryptedData = encryptToString(pwd);
    this->qSqlDatabase.setUserName("mojito");
    this->qSqlDatabase.setPassword(encryptedData);
}

Klockwork 不再报告 CXX.SV.PWD.PLAIN 缺陷,因为 QT 框架提供的 encryptToString API 在文本 J0a1m8 传递给 setPassword API 之前对其进行了加密。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。