跨站点脚本:如何检查字符串

时间:2012-01-16 09:51:25

标签: xss

我有一个字符串。这是某些html标签的某些属性的值。

如何检查此字符串是否包含javascript?

例如(IMG标签的SRC属性):

1. <IMG src="javascript:alert('XSS')"> - contains script<br/>
2. <IMG src="JaVaScRiPt:alert('XSS')"> - contains script<br/>
3. <IMG &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;> - also contains javascript

2 个答案:

答案 0 :(得分:0)

首先必须规范化,然后检查。但我会看看HtmlPurifier或OWASP AntiSamy。

答案 1 :(得分:0)

这很难做到,因为有很多奇怪而棘手的方法可以偷偷进入JavaScript。

如果您必须首先允许HTML输入,那么

HTMLPurifier具有相当复杂的解析来过滤掉所有可能不安全的HTML。

但是,通常你甚至不应该尝试这样做,只需总是逃避字符串

在PHP中:

echo htmlspecialchars($string);

在JS中,您可以使用document.createTextNode()或jQuery的等效$(el).text()来安全地将文本插入DOM(这两种方法不需要转义)。