【发布时间】:2011-04-11 22:42:03
【问题描述】:
知道如何防止对 node.js 应用程序的 XSS 攻击吗?任何处理在 href、onclick 属性等中删除 javascript 的库。来自 POST 数据?
我不想为所有这些写一个正则表达式:)
有什么建议吗?
【问题讨论】:
标签: xss node.js serverside-javascript
知道如何防止对 node.js 应用程序的 XSS 攻击吗?任何处理在 href、onclick 属性等中删除 javascript 的库。来自 POST 数据?
我不想为所有这些写一个正则表达式:)
有什么建议吗?
【问题讨论】:
标签: xss node.js serverside-javascript
我创建了一个捆绑 Caja HTML Sanitizer 的模块
npm install sanitizer
http://github.com/theSmaw/Caja-HTML-Sanitizer
https://www.npmjs.com/package/sanitizer
感谢任何反馈。
【讨论】:
require('sanitizer').sanitize 去除所有a[href] 属性,而不仅仅是顽皮的属性。对于我们的用例,我们需要链接仍然被接受(只是不是顽皮的链接,以及其他 xss 顽皮等),有什么建议吗?
Sanitize/Rewrite HTML on the Client Side 的答案之一建议从 Google Caja 借用 JS 中基于白名单的 HTML sanitizer,据我所知,它可以在不依赖浏览器 DOM 的情况下实现 HTML SAX 解析器.
更新:另外,请记住,Caja sanitizer 显然已经过全面、专业的安全审查,而众所周知,正则表达式很容易以危及安全的方式输入错误。
2017-09-24 更新:现在还有DOMPurify。我还没有使用它,但它看起来满足或超过了我寻找的每一点:
尽可能依赖运行时环境提供的功能。 (尽可能依赖经过充分测试的成熟实现,这对于性能和最大限度地提高安全性都很重要。)
默认配置旨在尽可能少地剥离,同时仍保证删除 javascript。
toStaticHTML。高度可配置,使其适用于对可以包含任意 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, ''');
}
【讨论】:
我最近通过chriso发现了node-validator。
get('/', function (req, res) {
//Sanitize user input
req.sanitize('textarea').xss(); // No longer supported
req.sanitize('foo').toBoolean();
});
此库中不再提供 XSS 功能。
【讨论】:
您也可以查看ESAPI。有一个javascript version of the library。它非常坚固。
【讨论】:
在较新版本的validator 模块中,您可以使用以下脚本来防止 XSS 攻击:
var validator = require('validator');
var escaped_string = validator.escape(someString);
【讨论】:
试用 npm 模块 strip-js。它执行以下操作:
【讨论】:
!important。
您应该尝试库 npm "insane"。 https://github.com/bevacqua/insane
我在生产中尝试过,效果很好。大小非常小(压缩后约 3kb)。
文档非常易于阅读和理解。 https://github.com/bevacqua/insane
【讨论】:
2021-04-16 更新:xss 是一个用于过滤用户输入以防止 XSS 攻击的模块。
使用白名单指定的配置清理不受信任的 HTML(以防止 XSS)。
【讨论】: