我使用AntiSamy与现有的antisamy-1.4.1.xml政策。该政策正在很好地阻止大部分XSS攻击,但低于它未阻止以下。关于如何阻止下面的以下任何建议,以防止跨站脚本攻击?

1234%27%2Balert%2873918%29%2B%27

由于

有帮助吗?

解决方案

Antisamy是指用于允许不可信用户输入“安全” HTML的有限子集的HTML内容过滤器。它的不可以一个通用的输入滤波器,可以节省你不必去想串逃逸,XSS问题。

您应该使用antisamy仅清理内容将包含HTML您要逐字输出在页面上。大多数用户输入通常不是HTML:当用户键入a<b or c>d,他们应该通常得到字面小于和大于字符,而不是一个大胆的标签。为了确保实现这一目标正确,必须HTML转义,使程序在输出级插入到你的页面,而不是任何与antisamy所有文本内容。

1234%27%2Balert%2873918%29%2B%27

这看上去一点也不像典型的HTML注入攻击。它包含唯一的“特殊”字符是撇号,这通常不是HTML特别,实际上不能过滤输入的出来,因为用户不一般需要使用撇号在英语写作。

如果这是导致脚本注入您的应用程序,你有更大的问题比什么antisamy可以解决。如果这是导致你的页面弹出一个对话alert(),您可能正在使用的JavaScript字符串字面值转义,例如是这样的:

<a href="..." onclick="callfunc('hello <%= somevar %>');">

把文本内容转换成JavaScript代码作为字符串文字需要逸出的另一种形式;一个转动'字符(在URL编码输入%27)成反斜杠转义\',和本身\\\(以及一些其他的替代)。

在简单的方法来获得从服务器端脚本语言的值(字符串或其它方式)至一个JavaScript字面是使用标准的JSON编码器。

但是,在上述情况下,JavaScript字符串文字自身包含一个HTML属性里面,这样你就必须HTML编码的 的编码器JSON的结果。这是一个有点难看;这是最好的避免内联事件处理程序的属性。使用外部脚本和<script>元件代替,结合而不是HTML从JS事件。

即使在<script>块,在这里一般不需要HTML编码,必须当心的字符串</script>的(或者,一般地,任何开始</,这可以结束块)。为了避免这种序列就应该更换别的东西,例如<字符。 \x3C。一些JSON编码器可能有一个选项要做到这一点,为您节省了麻烦。

有许多其他地方将内容插入含语言需要特殊的种类编码。每个人都有自己的规则。你不能用一个通用的输入滤波器避免串编码的难度。一些“防XSS”过滤器尝试,但他们无一例外惨遭失败。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top