敏感信息的明文存储¶
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
以明文形式存储的敏感信息可被获得存储访问权限的攻击者访问。这对 cookie 来说尤其重要,因为 cookie 存储在最终用户的机器上。
建议¶
确保敏感信息在存储之前始终被加密。如果可能,避免将敏感信息完全放在 cookie 中。相反,建议在 cookie 中存储一个密钥,该密钥可用于查找敏感信息。
通常,只有在需要以明文形式使用敏感信息时才对其进行解密。
请注意,外部进程通常会存储应用程序的 standard out
和 standard 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));
});