使用 html 实体执行跨站点脚本

Posted

技术标签:

【中文标题】使用 html 实体执行跨站点脚本【英文标题】:Executing cross site scripting using html entity 【发布时间】:2019-06-20 04:54:17 【问题描述】:

我有一个关于 XSS 的问题:

    当我阅读应该防止 XSS 的 html 实体,但从以下站点阅读时:https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet#HTML_entities 我看到他们建议使用以下方法进行绕过:

    "<IMG SRC=javascript:alert(&quot;XSS&quot;)>"
    

这里的html实体需要防御XSS不是吗?

    是否可以使用 HEX 注入 XSS?

谢谢

【问题讨论】:

【参考方案1】:

    使用上面的 Payload &amp;lt; &amp;gt; 这两个符号将被转换为 &amp;lt;&amp;gt; 转义输入并且没有机会触发 XSS。 当然 Html 实体用于防止 XSS 攻击,但有些情况会有所不同,具体取决于网站处理输入的方式。

    是的,完全可以使用 HEX 来注入 XSS。

    &lt;a href=&amp;#x6A&amp;#x61&amp;#x76&amp;#x61&amp;#x73&amp;#x63&amp;#x72&amp;#x69&amp;#x70&amp;#x74&amp;#x3A&amp;#x61&amp;#x6C&amp;#x65&amp;#x72&amp;#x74&amp;#x28&amp;#x27&amp;#x58&amp;#x53&amp;#x53&amp;#x27&amp;#x29&gt;Click Here&lt;/a&gt;

【讨论】:

在这种情况下 不会被转换。只有这个:&quot。那么它会运行吗?以及为什么在他们推荐使用 javascript 十六进制编码来防御 JavaScript 变量中的 XSS 的建议中? owasp.org/index.php/… 这完全取决于他们如何解析有效负载。如果它没有转换这些 那么 XSS 肯定会执行,并且可以通过在警报 中使用整数值来简单地绕过它

以上是关于使用 html 实体执行跨站点脚本的主要内容,如果未能解决你的问题,请参考以下文章

VueJS - 清理输出以防止跨站点脚本攻击

使用htmlentities( )函数抵御跨站点脚本(XSS)攻击

AMF和跨站点脚本漏洞混淆

防止来自静态站点的跨站点脚本攻击

跨站点脚本帮助?

跨站点脚本攻击