如何检测前端应用中的异常XSS攻击请求?
我在开发一个用户评论系统时,用了DOMPurify过滤输入,但最近发现有用户通过javascript:alert(1)形式的链接绕过防护。尝试用黑名单过滤关键词后,攻击者改用十六进制编码的payload,现在该怎么有效检测这类异常请求?
之前在服务端中间件这样处理:
app.use((req, res, next) => {
const危险字符 = /script|onload|&#x../gi;
if (dangerousCharacter.test(req.body.content)) {
return res.sendStatus(403);
}
next();
});
但发现规则覆盖不全,有没有更智能的检测方法?比如分析请求模式或结合其他安全库?
你现在的服务端中间件检测逻辑太简陋了,靠几个关键词和正则完全防不住变种攻击,尤其是编码绕过的 payload。
正确的做法是:输入过滤 + 输出上下文编码 + CSP 三管齐下。
首先,DOMPurify 用法要正确,别乱关配置项。比如你要允许
标签的话,记得设置ADD_ATTR: ['href'],但一定要限制href只能是http://或https://开头,别让javascript:通过。代码可以改成这样:
然后,服务端别光靠简单正则了,你可以考虑引入像
validator.js这种成熟的库来判断输入是否包含潜在恶意内容。最后,最重要的一道防线是CSP。设置好
Content-Security-Policy头,限制脚本只能执行内联的白名单内容,这样即使攻击者注入了脚本也执行不了。比如:
这样三重防护加上,基本上就能挡住大多数XSS攻击了。