反射型跨站脚本攻击¶
ID: js/reflected-xss
Kind: path-problem
Security severity: 7.8
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-079
- external/cwe/cwe-116
Query suites:
- javascript-code-scanning.qls
- javascript-security-extended.qls
- javascript-security-and-quality.qls
在没有对输入进行适当清理的情况下,将用户输入(例如,HTTP 请求参数)直接写入 HTTP 响应,会导致跨站脚本漏洞。
这种漏洞也称为反射型跨站脚本攻击,以区别于其他类型的跨站脚本攻击。
建议¶
为了防止跨站脚本攻击,请考虑在将用户输入写入响应之前使用上下文输出编码/转义,或使用参考资料中提到的其他解决方案之一。
示例¶
以下示例代码将 HTTP 请求的一部分(由用户控制)直接写入响应。这会导致网站容易受到跨站脚本攻击。
var app = require('express')();
app.get('/user/:id', function(req, res) {
if (!isValidUserId(req.params.id))
// BAD: a request parameter is incorporated without validation into the response
res.send("Unknown user: " + req.params.id);
else
// TODO: do something exciting
;
});
对用户控制的数据进行清理可防止漏洞
var escape = require('escape-html');
var app = require('express')();
app.get('/user/:id', function(req, res) {
if (!isValidUserId(req.params.id))
// GOOD: request parameter is sanitized before incorporating it into the response
res.send("Unknown user: " + escape(req.params.id));
else
// TODO: do something exciting
;
});
参考资料¶
OWASP:XSS (跨站脚本) 防御速查表.
OWASP 跨站脚本攻击的类型.
维基百科:跨站脚本攻击.
通用弱点枚举:CWE-79.
通用弱点枚举:CWE-116.