Php 清理(不删除)破坏文档的HTML输入,但不删除其他标记

Php 清理(不删除)破坏文档的HTML输入,但不删除其他标记,php,html,sanitization,xss,Php,Html,Sanitization,Xss,让我们假设我们有一个生成HTML输入的用户表单,下面可能是发布到PHP的内容的示例 <p>Hello</p> <p><strong>World</strong></p> 你好 世界 现在,这些将在稍后通过注入到HTML输出的某个DIV中显示 我要防止的是以下内容被输入: </div> <p>Hello</p> <p><strong>World</stron

让我们假设我们有一个生成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>

someScript();
......
你好

世界

如何使用PHP确定此输入不会破坏文档、包含错误的iFrame或运行脚本?最重要的是,我仍然想要这些信息,我不会把它们扔掉,但它需要作为某种无害的文本包含进来

使用替代标记不是一个选项,它需要是HTML。

您需要的是

它不仅根据标准输出html,还清除xss漏洞中发布的代码

编辑1:您也应该退出,这很有趣:)

编辑2:您还可以签出并 但imo htmlpurifier在处理更复杂的事情时,比如您的事情时,它要好得多,而且更易于定制。

您需要的是

它不仅根据标准输出html,还清除xss漏洞中发布的代码

编辑1:您也应该退出,这很有趣:)

编辑2:您还可以签出并
但是imo htmlpurifier更好,更具可定制性,当它涉及到更复杂的事情时,比如你的。

如果你想保留损坏的标签,但使它们无害,我建议保存两次。将未修改的post数据保存到一个数据库列中,然后将数据保存到另一个数据库列中。通常显示净化版,仅在需要时显示危险版

在HTML净化器支持论坛的某个地方,有一个示例说明如何将
更改为
文本(危险的.url.or.javascript)
。当你说你想保留信息,而不是把它扔掉时,这可能就是你在寻找的东西


HTML净化器是高度可定制的,作者伏击指挥官在HTML净化器论坛和StackOverflow上都非常有用。

如果您想保留损坏的标签,但使其无害,我建议保存两次。将未修改的post数据保存到一个数据库列中,然后将数据保存到另一个数据库列中。通常显示净化版,仅在需要时显示危险版

在HTML净化器支持论坛的某个地方,有一个示例说明如何将
更改为
文本(危险的.url.or.javascript)
。当你说你想保留信息,而不是把它扔掉时,这可能就是你在寻找的东西


HTML净化器是高度可定制的,作者伏击指挥官在HTML净化器论坛和StackOverflow上都非常有帮助。

我如何配置它,而不仅仅是删除文本?我希望看到代码中的标记,只是对它们做了一些处理,使它们不会运行。因此,您希望像或这样的随机标记正常工作,但标记只是可见的?破坏html的标记消失了?所有内容保持不变,但只是进入一种状态,即不会通过更改DOM、添加iFrame破坏文档,或者运行脚本。检查我的编辑。使用这两个函数,所有内容都以文本形式保留和输出,这是一个快速简单的解决方案:P如果使用非拉丁语,它们可能有点问题languages@Incognito,如果要整理普通HTML(确保标记匹配等),并将某些指定的标记更改为纯文本,你需要HTML净化器加上一个自定义注射器。正如我在回答中所说,这样的注入器已经为
标签编写好了。为
标记修改它应该相当容易。我如何配置它以不仅仅删除文本?我希望看到代码中的标记,只是对它们做了一些处理,使它们不会运行。因此,您希望像或这样的随机标记正常工作,但标记只是可见的?破坏html的标记消失了?所有内容保持不变,但只是进入一种状态,即不会通过更改DOM、添加iFrame破坏文档,或者运行脚本。检查我的编辑。使用这两个函数,所有内容都以文本形式保留和输出,这是一个快速简单的解决方案:P如果使用非拉丁语,它们可能有点问题languages@Incognito,如果要整理普通HTML(确保标记匹配等),并将某些指定的标记更改为纯文本,你需要HTML净化器加上一个自定义注射器。正如我在回答中所说,这样的注入器已经为
标签编写好了。为
标记修改它应该相当容易。