我正在测试一个针对XSS漏洞的Web应用程序,我想知道攻击者是否有可能在不了解或关注它的情况下关闭前面的HTML标记。
假设前面的标记(攻击者不知道)是<span>
。攻击者是否有可能做类似
</>
&lt; - 关闭前一个标记(在本例中为<span>
)<insert attack here>
答案 0 :(得分:3)
没有没有...但是如果你想在防御XSS的同时允许一些HTML,你不应该使用任何方法,然后将HTML解析为DOM,将每个元素和属性传递过白名单,然后将其序列化自己回到HTML。
答案 1 :(得分:1)
不,没有通用的方法来关闭标记,但是攻击者只能堆叠一些常见的标记结尾,例如:
</div></span></p></table>
代码无论如何都无效,但浏览器会尝试通过忽略不适用的代码来充分利用代码(在这种情况下,div
和table
代码),或隐式创建匹配的起始标记(在这种情况下为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;"> </span>
<script type="text/javascript">
window.alert(document.getElementById("my-attack-element").parentNode.tagName);
</script>
</div>
</html>
我喜欢垃圾邮件结束标签的方法......