Any idea how one would go about preventing XSS attacks on a node.js app? Any libs out there that handle removing javascript in hrefs, onclick attributes,etc. from POSTed data?
I don't want to have to write a regex for all that :)
Any suggestions?
Any idea how one would go about preventing XSS attacks on a node.js app? Any libs out there that handle removing javascript in hrefs, onclick attributes,etc. from POSTed data?
I don't want to have to write a regex for all that :)
Any suggestions?
我创建了一个捆绑 Caja HTML Sanitizer 的模块
npm install sanitizer
http://github.com/theSmaw/Caja-HTML-Sanitizer
https://www.npmjs.com/package/sanitizer
任何反馈表示赞赏。
Sanitize/Rewrite HTML on the Client Side的答案之一建议从 Google Caja 借用 JS 中基于白名单的 HTML sanitizer,据我所知,它可以在不依赖于浏览器的 DOM。
更新:另外,请记住,Caja sanitizer 显然已经过全面、专业的安全审查,而众所周知,正则表达式很容易以危及安全的方式打错字。
2017-09-24 更新:现在还有DOMPurify。我还没有使用它,但它看起来满足或超过了我寻找的每一点:
尽可能依赖运行时环境提供的功能。(通过尽可能多地依赖经过充分测试的成熟实现,这对于性能和最大限度地提高安全性都很重要。)
默认配置旨在尽可能少地剥离,同时仍保证删除 javascript。
toStaticHTML
在 IE8 和 IE9 下不可配置。高度可配置,使其适用于对可以包含任意 HTML 的输入实施限制,例如 WYSIWYG 或 Markdown 注释字段。(其实这里是堆顶)
他们对兼容性和可靠性很认真
所有常用技术也适用于 node.js 输出,这意味着:
我不确定 node.js 是否为此提供了一些内置功能,但类似的东西应该可以完成这项工作:
function htmlEscape(text) {
return text.replace(/&/g, '&').
replace(/</g, '<'). // it's not neccessary to escape >
replace(/"/g, '"').
replace(/'/g, ''');
}
get('/', function (req, res) {
//Sanitize user input
req.sanitize('textarea').xss(); // No longer supported
req.sanitize('foo').toBoolean();
});
此库中不再提供 XSS 功能。
您还可以查看ESAPI。该库有一个javascript 版本。它非常坚固。
在较新版本的validator
模块中,您可以使用以下脚本来防止 XSS 攻击:
var validator = require('validator');
var escaped_string = validator.escape(someString);
试用 npm 模块strip-js
。它执行以下操作:
2021-04-16 更新:xss 是一个用于过滤用户输入以防止 XSS 攻击的模块。
使用白名单指定的配置清理不受信任的 HTML(以防止 XSS)。
访问https://www.npmjs.com/package/xss
项目主页:http: //jsxss.com
您应该尝试图书馆 npm “疯狂”。 https://github.com/bevacqua/insane
我在生产中尝试,效果很好。大小非常小(压缩后约 3kb)。
该文档非常易于阅读和理解。 https://github.com/bevacqua/insane