让我们假设我们有一个生成HTML输入的用户表单,以下内容可以作为发送给PHP的内容的一个示例。
<p>Hello</p>
<p><strong>World</strong></p>
现在,这些将在稍后通过注入HTML输出显示到某些DIV中。
我想要阻止的是输入以下内容:
</div>
<p>Hello</p>
<p><strong>World</strong></p>
<div>
甚至可能是:
</div>
<script> someScript(); </script>
<iframe src="http://www.example.com">......
<p>Hello</p>
<p><strong>World</strong></p>
<div>
如何使用PHP确定此输入不会破坏文档,包含错误的iframe或运行脚本?最重要的部分是我仍然需要这些信息,我不是要把它丢掉,但它需要被包含在某种无害的文本中。
使用替代标记不是一种选择,它必须是HTML。
答案 0 :(得分:4)
您需要的是htmlpurifier
不仅可以根据标准输出html,还可以清除xss漏洞中发布的代码。
编辑1 :您还应该check the comparison,有趣的是:)
修改2 :您还可以查看htmlspecialchars和htmlentities 但是,对于像你这样的更复杂的东西,imo htmlpurifier更好,更可定制。
答案 1 :(得分:1)
如果你想保留破碎的标签但是让它们无害,我建议保存两次。将未修改的发布数据保存到一个数据库列中,将Purified保存到另一个数据库列中。通常显示纯化版本,仅在需要时显示危险版本。
HTML Purifier支持论坛上的某个地方有一个如何将<a href="dangerous.url.or.javascript">text</a>
更改为<span>text (dangerous.url.or.javascript)</span>
的示例。当你说要保留信息时,这可能是你正在寻找的东西,而不是把它丢弃。
HTML Purifier是高度可定制的,作者Ambush Commander在HTML Purifier论坛和StackOverflow上都非常有用。