0

我想从 javascript 中的字符串中去除几乎每个 html 标记,只允许几个基本标记
(并去除它们的属性)来防止Cross-Site-Scripting

很多说,不应该用javascript来做,因为客户端可能禁用了javascript,导致过滤器崩溃。但是,我的整个项目都依赖于 javascript,并且禁用了 javascript 的客户端将永远不会看到输出,而且我无法在服务器端执行此操作。

(1) 在这种情况下,我是否可以假设它可以安全地完成?

bobince建议使用 DOM(而不是 RegEx)来过滤可能不安全的输入。我当然不是 XSS 专家,但因为他的示例依赖于在过滤器完成其工作之前插入到 DOM 的字符串,我可以想象它可能是不安全的,例如:

var unsecureString = '<img src=".." onload="alert(\'bad\')" />';
$('#alice').update(unsecureString);
filterNodes($('#alice'), {p:[],a:['href']}); // see link above

(2) 我可以确定,上面的坏事件永远不会触发吗?

(3) If not:如何避免此类问题,但仍使用 DOM?

4

1 回答 1

1

看看 google caja sanitizer。

https://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

于 2013-08-22T02:30:56.777 回答