【问题标题】:How can I allow HTML in a whitelist with PHP如何使用 PHP 在白名单中允许 HTML
【发布时间】:2010-12-30 20:13:54
【问题描述】:

我知道多年来有很多关于使用 PHP 过滤数据的最佳方法的讨论,但我想在我当前的项目中采用白名单方法。

我只希望用户能够使用以下 HTML

<b>bold</b>
<i>italics</i>
<u>underline</u>
<s>strikethrough</s>
<big>Big size</big >
<small>Small size</small>

Hyperlink <a href="http://www.site.com">website</a>

A Bulleted List:
<ul>
<li>One Item</li>
<li>Another Item</li>
</ul>

An Ordered List:
<ol>
<li> First Item</li>
<li> Second Item</li>
</ol>

<blockquote>Because it is indented</blockquote>

<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>

谁能告诉我在 PHP 中执行此操作的最佳方法?我过去只允许所有 html 减去某些代码

【问题讨论】:

  • 附带说明,您应该使用 而不是 因为 不是有效的 html。
  • &lt;b&gt; 是有效的 HTML。它没有被弃用。它没有被删除。 (虽然有些人认为它应该是)。粗体文本是一种表示形式,与强调强调不同。您不应该简单地将&lt;b&gt; 的任何实例替换为&lt;strong&gt;,您应该考虑哪些语义对于特定情况是正确的并使用最好的(可能不是&lt;strong&gt; 结合CSS @987654326 @)。

标签: php filter sanitization


【解决方案1】:

我相信 HTML Purifier Library 会很好地工作:

http://htmlpurifier.org/

HTML Purifier 是符合标准的 用 PHP 编写的 HTML 过滤器库。 HTML Purifier 不仅会删除所有 恶意代码(通常称为 XSS) 经过彻底审核,安全又 允许的白名单,它也会 确保您的文件是标准的 合规,只有可以实现的东西 具有全面的知识 W3C 的规范。厌倦了使用 BBCode 由于当前的格局 有缺陷或不安全的 HTML 过滤器? 有一个所见即所得的编辑器,但从来没有 能用吗?寻找 高品质,符合标准, 开源组件 您正在构建的应用程序? HTML 净化器适合你!

【讨论】:

  • 这很好,但非常笨重,实际上它是巨大的
  • 嗯,是的,过滤 HTML 实际上是一项非常艰巨的工作。
【解决方案2】:

最简单的解决方案是strip_tags(),,它接受包含允许标签的第二个参数:

strip_tags($string, "<b><i><u><a><s><big><small><ul><li><ol><blockquote><h1><h2><h3>");

【讨论】:

  • 不好。 strip_tags 是解决难题的一种简单方法,它总是有许多变通方法来获取不良内容。即使它没有错误,但缺少属性过滤使您无法禁止像 &lt;a onmouseover="do_script_injection"&gt; 这样的有害结构。跨度>
【解决方案3】:

另一条路线是使用 strip_tags 和第二个参数。

http://php.net/manual/en/function.strip-tags.php

【讨论】:

    【解决方案4】:

    我会先通过 tidy 运行提交的代码以对其进行规范化,然后使用 xpath 或应用 xslt 来仅选择允许的元素。这样,什么都没有可以泄漏。请记住,在任何给定的网站情况下,对于每个写入请求 [使用 tidy 和 xpath/xslt],您可能会有数千个甚至数十万个读取请求,因此平均而言,性能影响可以忽略不计。另一方面,如果您正在进行批处理..

    编辑:哦,并且:不要用正则表达式来做这件事。数学上不可能正确地做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 2013-06-11
      • 2017-01-21
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      相关资源
      最近更新 更多