我将AntiSamy与available antisamy-1.4.1.xml策略一起使用。该策略很好地阻止了大多数XSS攻击,但以下内容未被阻止。关于如何屏蔽以下内容以防止XSS攻击,有什么建议吗?
1234%27%2Balert%2873918%29%2B%27谢谢
发布于 2010-08-08 08:51:19
Antisamy是一种HTML内容过滤器,用于允许不受信任的用户输入“安全”HTML的有限子集。它是XSS ,它是一个通用的输入过滤器,它可以使您不必考虑字符串转义和问题。
您应该只使用antisamy来清理将包含您希望在页面上逐字输出的HTML的内容。大多数用户输入通常不是超文本标记语言:当用户输入a<b or c>d时,他们通常应该得到文字上的小于和大于字符,而不是粗体标记。为了确保这种情况正确发生,您必须对在输出阶段插入到页面中的所有文本内容进行HTML转义,而不是任何与反HTML有关的内容。
1234%27%2Balert%2873918%29%2B%27这看起来一点也不像典型的HTML注入攻击。它包含的唯一“特殊”字符是一个撇号,这在HTML中通常并不特殊,而且实际上不能从输入中过滤掉,因为用户在用英语书写时通常需要使用撇号。
如果这导致了应用程序的脚本注入,那么您就有了比antisamy所能解决的更大的问题。如果这会导致页面弹出alert()对话框,则可能是在JavaScript字符串文字中使用了未转义的值,例如:
<a href="..." onclick="callfunc('hello <%= somevar %>');">将文本内容作为字符串文字放入JavaScript代码需要另一种形式的转义;一种是将'字符(URL编码输入中的%27 )转换为反斜杠转义的\',并将\本身转换为\\ (以及其他一些替代方法)。
将值(字符串或其他)从服务器端脚本语言转换为JavaScript文本的简单方法是使用标准的JSON编码器。
然而,在上面的例子中,JSON字符串文字本身包含在一个JavaScript属性中,因此您必须对JSON编码器的结果进行HTML编码。这有点丑陋;最好避免使用内联事件处理程序属性。使用外部脚本和<script>元素,从JS而不是HTML绑定事件。
即使在通常不需要对<script>进行编码的HTML块中,也必须注意字符串</script> (或者,通常是以</开头的任何内容,它可以结束代码块)。为了避免出现这种情况,您应该用其他字符替换<字符,例如。\x3C。一些JSON编码器可能可以选择这样做,以省去麻烦。
在许多其他地方,将内容插入到包含语言中需要特殊类型的编码。每种方法都有自己的规则。您无法通过使用通用输入过滤器来避免字符串编码的困难。一些“反XSS”过滤器尝试过,但它们总是失败得很糟糕。
https://stackoverflow.com/questions/3432548
复制相似问题