知道如何防止对node.js应用程序进行XSS攻击吗?在那里处理删除href,onclick属性等中的javascript的任何库。从发布的数据?
我不想为所有这些写正则表达式:)
有什么建议?
Answers:
在客户端对HTML进行清理/重写的答案之一是建议从Google Caja借用JS中基于白名单的HTML清理器,据我快速浏览所知,该实现器不依赖HTML来实现HTML SAX解析器。浏览器的DOM。
更新:另外,请记住,显然Caja消毒剂已经过全面,专业的安全检查,而正则表达式以易于破坏安全性的方式而闻名。
更新2017-09-24:现在也有DOMPurify。我还没有使用过它,但是看起来它达到或超过了我要寻找的每一个要点:
尽可能依靠运行时环境提供的功能。(通过尽可能多地使用经过测试的成熟实现,对于性能和最大化安全性都非常重要。)
默认配置旨在尽可能减少剥离,同时仍保证删除javascript。
toStaticHTML
在IE8和IE9下进行配置的状态。高度可配置,使其适用于对可以包含任意HTML的输入进行限制,例如WYSIWYG或Markdown注释字段。(实际上,这是这里的顶端)
他们对兼容性和可靠性很重视
我创建了一个捆绑了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顽皮等),有什么建议吗?
所有常用技术也都适用于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版本。非常坚固。
在较新版本的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