CodeQL 文档

敏感信息的明文存储

ID: js/clear-text-storage-of-sensitive-data
Kind: path-problem
Security severity: 7.5
Severity: error
Precision: high
Tags:
   - security
   - external/cwe/cwe-312
   - external/cwe/cwe-315
   - external/cwe/cwe-359
Query suites:
   - javascript-code-scanning.qls
   - javascript-security-extended.qls
   - javascript-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

以明文形式存储的敏感信息可被获得存储访问权限的攻击者访问。这对 cookie 来说尤其重要,因为 cookie 存储在最终用户的机器上。

建议

确保敏感信息在存储之前始终被加密。如果可能,避免将敏感信息完全放在 cookie 中。相反,建议在 cookie 中存储一个密钥,该密钥可用于查找敏感信息。

通常,只有在需要以明文形式使用敏感信息时才对其进行解密。

请注意,外部进程通常会存储应用程序的 standard outstandard error 流,这也会导致记录的敏感信息被存储。

示例

以下示例代码以纯文本形式将用户凭据(在本例中为密码)存储在 cookie 中

var express = require('express');

var app = express();
app.get('/remember-password', function (req, res) {
  let pw = req.param("current_password");
  // BAD: Setting a cookie value with cleartext sensitive data.
  res.cookie("password", pw);
});

相反,凭据应被加密,例如通过使用 Node.js crypto 模块

var express = require('express');
var crypto = require('crypto'),
    password = getPassword();

function encrypt(text){
  var cipher = crypto.createCipher('aes-256-ctr', password);
  return cipher.update(text, 'utf8', 'hex') + cipher.final('hex');
}

var app = express();
app.get('/remember-password', function (req, res) {
  let pw = req.param("current_password");
  // GOOD: Encoding the value before setting it.
  res.cookie("password", encrypt(pw));
});

参考

  • M. Dowd、J. McDonald 和 J. Schuhm,《软件安全评估的艺术》,第 1 版,第 2 章 - “加密的常见漏洞”,第 43 页。Addison Wesley,2006。

  • M. Howard 和 D. LeBlanc,《编写安全代码》,第 2 版,第 9 章 - “保护秘密数据”,第 299 页。微软,2002。

  • 常见弱点枚举:CWE-312.

  • 常见弱点枚举:CWE-315.

  • 常见弱点枚举:CWE-359.

  • ©2025GitHub, Inc.
  • 条款
  • 隐私