是否有通用的方法来关闭HTML标记?

时间:2013-11-19 16:56:05

标签: html tags xss

我正在测试一个针对XSS漏洞的Web应用程序,我想知道攻击者是否有可能在不了解或关注它的情况下关闭前面的HTML标记。

假设前面的标记(攻击者不知道)是<span>。攻击者是否有可能做类似

的事情

</>&lt; - 关闭前一个标记(在本例中为<span><insert attack here>

3 个答案:

答案 0 :(得分:3)

没有没有...但是如果你想在防御XSS的同时允许一些HTML,你不应该使用任何方法,然后将HTML解析为DOM,将每个元素和属性传递过白名单,然后将其序列化自己回到HTML。

答案 1 :(得分:1)

不,没有通用的方法来关闭标记,但是攻击者只能堆叠一些常见的标记结尾,例如:

</div></span></p></table>

代码无论如何都无效,但浏览器会尝试通过忽略不适用的代码来充分利用代码(在这种情况下,divtable代码),或隐式创建匹配的起始标记(在这种情况下为p标记)。

最终结果是攻击者在大多数情况下会突破一个或多个元素,可能会在途中添加一些空元素。

答案 2 :(得分:1)

更好,更轻量级的方法是只对所有数据进行HTML编码。转换&lt;到&amp; lt;和&gt;到&amp; gt;有效地使注入的HTML无用。

此外,如果你已经处于XSS状态,攻击者可以通过javascript来解决这个问题,但是我认为这种方法并不是很有用,因为如果javascript正在执行你已经被利用了。

<html>
<body>
<div id="the-one-im-looking-for"><span id="my-attack-element" style="display:none;">&nbsp;</span>
<script type="text/javascript">
window.alert(document.getElementById("my-attack-element").parentNode.tagName);
</script>
</div>
</html>

我喜欢垃圾邮件结束标签的方法......