有一个清理数据的 Node.js 项目,还有一个用于 JavaScript 的 OWASP 库,用于处理清理以防止 XSS。
我一直在对这些库进行基准测试,它们非常密集,可能有点矫枉过正,我的应用程序不需要任何动态 HTML(由用户提交,bbtags 或其他任何东西,根本不需要)所以为什么不这样做:
- 禁用“
<
”和“>
”字符,不要替换它们或任何东西,只是禁用它们,如果用户提交这些,给他们一个警告,这些被禁用(客户端和服务器端验证) &
=>&
"
=>"
'
=>'
/
=>/
- 对提交的 URL 进行编码(GET 参数等)
- 由于我的应用程序使用 HTML5 PushState 并且后端与前端完全分离,因此涵盖了基于 DOM 的 XSS。
这是否足以保护自己,正如我所说,我的应用程序不需要用户提交的任何 HTML,所以我根本不需要<
and>
标签。
感谢所有反馈,这是我现在使用的:
var pattern = /<(.*)>/;
function hasHtmlTags(string) {
return pattern.test(string);
};
if (hasHtmlTags(userData)) {
// Do something?
} else {
// Create entity.
}
所以用户仍然可以使用他们的表情符号 :< 等,并且只有在找到 < 和 > 的组合时才会触发该功能。所以没有昂贵的正则表达式之类的,只需禁用 < 和 > 组合就可以了。