【问题标题】:Should I use strip_tags() before HTML Purifier?我应该在 HTML Purifier 之前使用 strip_tags() 吗?
【发布时间】:2014-06-03 22:21:48
【问题描述】:

我在我的网站上集成了 Redactor(一个所见即所得的编辑器),它输出 HTML 而不是 BBCode 或 Markdown。我需要允许以下标签,因为它使用它们进行格式化:

<code><span><div><label><a><br><p><b><i><del><strike><u><img><video><audio><iframe><object><embed><param><blockquote><mark><cite><small><ul><ol><li><hr><dl><dt><dd><sup><sub><big><pre><code><figure><figcaption><strong><em><table><tr><td><th><tbody><thead><tfoot><h1><h2><h3><h4><h5><h6>

根据我在这里阅读和被告知的内容,为了安全地显示内容,我应该将原始数据存储在我的数据库中,以及我将实际输出的经过净化的版本(由 HTML Purifier 输出) (如果在清理时出现任何问题,则存在未经清理的版本)。

我的问题是,我应该也对数据调用strip_tags()(将上述标签作为允许的标签参数传递),还是应该直接将其传递给 HTML Purifier?

【问题讨论】:

  • 您可以为 htmlpurifier 设置一个带有 html 标签和属性的白名单。所以你不必先调用strip_tag(),但也许先调用它会更快,所以htmlpurifier不必检查那么多html代码。

标签: php sanitization sanitize htmlpurifier


【解决方案1】:

虽然您确实可以通过在事前过滤掉标签来减少像 HTML Purifier 这样的解析器所做的解析工作,但首先使用 strip_tags() 并没有安全收益,而且在您的用例中它可能不是不会有很大的不同。

它不会产生太大影响的原因当然是,您提交的平均内​​容不会是恶意的,因此通过您的所见即所得提交,这只会生成您已经想要的那些标签允许。因此,您不会在这些 cmets 的初步 strip_tags() 运行中删除任何标签。

同时,无论如何,恶意提交很可能会绕过strip_tags() 会给您带来的任何好处。但是,在解析器之前使用 strip_tags() 不会造成任何伤害,并且它可以通过让解析器占用大量资源来帮助防止尝试对您使用解析器 - 尽管 如果 解析器可能会导致问题(我希望它能够防止这种情况发生),这往往是通过嵌套深度而不是通过标签发生的。

简而言之:

在您的情况下,我认为没有理由推荐它;但我也没有理由劝阻你不要使用它。 strip_tags() 非常快,如果您在解析器之前使用它,它不会破坏任何东西。

【讨论】:

  • 我能想到的唯一例外是无效的 HTML,如果仅由 HTML Purifier 或 strip_tags + HTML Purifier 处理,它可能看起来会有所不同。但无论如何,人们可能不需要太在意这个案子。
猜你喜欢
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多