如何规避php消毒剂功能?

如何规避php消毒剂功能?,php,code-injection,Php,Code Injection,我正在使用guestbook.php代码研究代码注入。 我使用的普通消毒剂函数如下所示: php echo htmlspecialchars($messages) 并尝试了OWASP列表中几乎所有不同的攻击: 所有这些攻击都无法逃避过滤器 有人能建议一个可以避开此过滤器并执行的攻击吗 这类事件发生的背景很重要 如果结果是 放在一个完整的HTML标记之外-意思是,不用于属性值-和 放置在可以显示文本的其他有效HTML标记中,以及 在脚本元素(或旧IE的样式元素)之外,并且 在可用于二级攻击的上下

我正在使用guestbook.php代码研究代码注入。 我使用的普通消毒剂函数如下所示:

php echo htmlspecialchars($messages)

并尝试了OWASP列表中几乎所有不同的攻击:

所有这些攻击都无法逃避过滤器

有人能建议一个可以避开此过滤器并执行的攻击吗

这类事件发生的背景很重要

如果结果是

  • 放在一个完整的HTML标记之外-意思是,不用于属性值-和
  • 放置在可以显示文本的其他有效HTML标记中,以及
  • 在脚本元素(或旧IE的样式元素)之外,并且
  • 在可用于二级攻击的上下文之外
。。那么它应该是“安全的”;有了这些限制和htmlspecialchars的操作,它就不受大多数XS的影响

这是因为它不能通过转义
&
字符而创建不需要的HTML元素来进入恶意上下文。同样,它还从另一个方向切断XSS,因为由于
转义,无法终止带引号的HTML属性值

下面是一些可能失败的示例。请注意,使用的字符都不是“html特殊”字符,因此它绕过了执行的引号[not]:

<!-- value used directly in script context -->
<script>alert(/hacked/)</script>
        ^^^^^^^^^^^^^^^

<!-- value used as an attribute -->
<a href="javascript:alert(/hacked/)">Hello!</a>
         ^^^^^^^^^^^^^^^^^^^^^^^^^^

<!-- if the attribute is not quoted a new attribute can be injected -->
<a id=fail href=javascript:alert(/hacked/) href=..>
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

警报(/hacked/)
^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^