【问题标题】:Are there any good PHP based HTML filters available?有没有好的基于 PHP 的 HTML 过滤器可用?
【发布时间】:2011-01-20 04:03:03
【问题描述】:

我目前在一个带有 PHP 前端的项目中。我们非常关注安全性,因为我们将拥有大量用户并且是黑客的一个有吸引力的目标。我们的用户能够提交以后对其他用户可见的 HTML 格式的内容。这是一个大问题,因为我们很容易受到整个 XSS 攻击。我们尽可能地过滤,但攻击向量的种类非常多。

所以,我正在寻找基于 PHP 的 HTML 清理/过滤解决方案。商业解决方案很好(甚至是首选)。目前我们正在使用修改后的 HTML 净化器,但我们对结果并不满意。

有哪些优秀的库/工具能够过滤 HTML 的恶意部分?

拥有例如 HTML5 意识真是太好了,一旦它“在野外”可用,这将成为一场安全噩梦。

更新: 我们正在对HTML Purifier 进行深入配置。看起来我们之前使用的旧框架根本没有配置它。现在结果看起来好多了。

【问题讨论】:

  • 您是否有机会使用简化的标记语言(例如 stackoverflow 与 Markdown 一起使用),让 决定实际呈现哪些标签?
  • 另外,我认为这个问题有 6 票,而 5 个答案中的任何一个都没有票(现在),这一事实强化了这样一种想法,即没有任何好的解决方案HTML过滤方法的问题。
  • 我们赞成使用一些简化的“标记”语言,但我们无法控制所有可能的传入渠道,一些客户将使用能够支持 html 或纯文本的软件,并且有机会说服他们和我们这边的一些利益相关者这是一种可用的方法相当小:-(

标签: php html security filtering


【解决方案1】:

kses 运行良好。您可以轻松指定允许和禁止哪些元素,因此只需设置一个数组即可使其“支持 HTML5”。

WordPress 使用它,所以我想它很安全 ;)

【讨论】:

  • html 5 会有点棘手,因为它会在结束标签上引入例如属性等。作者在 sourceforge 页面上说他没有时间维护包,这是一个交易破坏者:-/
【解决方案2】:

我真的可以推荐 kses 进行 HTML 过滤。实际上这就是wordpress使用的。它是免费和开源的。

【讨论】:

  • 但是没有积极维护:-(
【解决方案3】:

HTML 净化器项目

就我个人而言,HTML Purifier project 取得了很好的效果

它是高度可定制的并且拥有庞大的代码库。唯一的问题是将文件上传到您的服务器。

您确定您的安装没有配置问题吗?因为如果配置正确,净化器根本不应该让任何 HTML 标记通过。

来自网站:

HTML Purifier 是符合标准的 用 PHP 编写的 HTML 过滤器库。 HTML Purifier 不仅会删除所有 恶意代码(俗称 XSS)经过彻底审核,
安全但允许的白名单,它 还将确保您的文件是 符合标准,仅此而已 可以通过全面的 了解 W3C 的规范。
厌倦了使用 BBCode,因为 不足的现状或
不安全的 HTML 过滤器?有一个
所见即所得的编辑器,但从未能够 用它?寻找高品质, 符合标准,开源 该应用程序的组件 你在建? HTML 净化器适用于 你!

我在这里写了一篇关于如何使用HTML purifier library with CodeIgniter的文章。

也许再试一次会有所帮助:

// load the config and overide defaults as necessary
$config = HTMLPurifier_Config::createDefault();
$config->set('HTML', 'Doctype', 'XHTML 1.0 Transitional');
$config->set('HTML', 'AllowedElements', 'a,em,blockquote,p,strong,pre,code');
$config->set('HTML', 'AllowedAttributes', 'a.href,a.title');
$config->set('HTML', 'TidyLevel', 'light'); 

【讨论】:

  • 请注意,OP 确实说过:“目前我们正在使用修改后的 html 净化器,但我们对结果不满意。”
  • HTML 净化器不适用于提问者,这很奇怪。我认为配置在某些时候设置错误。
  • 我们有可能通过进一步的配置来解决一些问题,但在某些情况下,我们的渗透人员绕过了它。目前 html 净化器是我们最好的选择,但我希望在这里找到另一个荣耀闪亮的解决方案 ;-)
【解决方案4】:

CodeIgniter 有一个出色的 XSS 过滤器,如果你想把它作为一个独立的函数,你可以从 system/libraries/Input.php 文件中删除它。

【讨论】:

  • 嗯,我担心这不符合我们对“外国”代码的非功能性要求。 PM 可能会欣赏从另一个框架中提取代码 ;-)
【解决方案5】:

您可以使用当前的解决方案并添加具有不同基本 URL 的 iframe 来显示内容。更改 iframe 上的基本 URL 将禁止从内部 JavaScript 代码访问主页。也就是说,如果您的网址是http://www.yoururl.com/thread/500 您可以在 iframe 中使用它来显示内容,例如:http//yoururl.com/thread/500/coment/1、http//yoururl.com/thread/500/coment/2。

您可以设置的基本 URL 取决于您的 DNS/主机配置。

这不是解决问题的解决方案,而是跳过它,尽管在你找到其他东西之前它可能很有用。

【讨论】:

  • 这不是一个真正的选择,因为有几个限制。对不起:)
【解决方案6】:

我以前使用过这个类并且取得了相当不错的成功: http://www.phpclasses.org/browse/package/2189.html

【讨论】:

  • 看起来它不再维护了。上一个版本是 2005 年,其中有很多新的漏洞很可能没有被涵盖。
【解决方案7】:

HTMLPurifier 可能有效——但我只想说文件夹结构过于复杂和浮夸。数百行 cmets、一个名为“test”的文件夹、一个许可证文件、自述文件和信息文件、图像、另一个用于烟雾测试的文件夹(这是彻头彻尾的滥用)、附加组件、配置、基准测试——最重要的是,大约 10 种不同的 CMS 兼容模式、他们网站上的推荐、完整版、精简版、哈士奇、轻度胖乎乎、唐氏综合症以及政治上正确的程序变体的全部范围。

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2015-10-29
    • 2012-12-07
    • 2021-04-14
    相关资源
    最近更新 更多