【问题标题】:Why should I use BBCode but not HTML in comment forms?为什么我应该在评论表单中使用 BBCode 而不是 HTML?
【发布时间】:2011-09-01 08:51:22
【问题描述】:

我正在用 PHP 写一个评论解析函数。

由于 BBCode 不是真正的标记语言,我从不喜欢这种写作风格。
因此,我让访问者能够在评论表单中使用基本的 HTML 代码。
并且在发布时,PHP 将检查不允许和无效的标签/属性,并替换或删除它们。

我相信它的工作和输出与 BBCode 完全相同。

如果这是真的,为什么会有 BBCode? BBcode 比 HTML 有什么优势吗?

更新

作为单色回答

如果您确信您的 HTML 过滤器足够安全,那么您应该没问题

好吧,我对自己编写过滤器没有信心,但有一些顶级过滤器,例如 PHP Simple HTML DOM Parser、HTML Purifier、htmLawed...

BBCode 由 UBB 开发,目前仍在广泛使用,如 phpBB。

来自 UBB/phpBB 的开发人员是否对自己编写完美 HTML 过滤器的技能没有信心? (我猜不是)

另外,就像 StackOverflow 使用的 Markdown 一样……如果 HTML+Parser 完成了这项工作,为什么还要发明另一种“语言”呢? (除了节省一些位...)

【问题讨论】:

  • 我认为 HTML 标记很容易被利用,您的检查是解决方法。黑客在寻找安全漏洞方面可能非常巧妙;)
  • @knittl 所以这是关于我/PHP VS 黑客的。好吧,也许我应该添加“如果……我的解析系统写得很好/严格。”我真的很想看到一个针对 html-allowed-comment-form 的黑客示例。
  • @niks 感谢 nikc,我目前正在 PHP Simple HTML DOM Parser、HTML Purifier 和 htmLawed 中进行选择。
  • 编写一个阻止脚本进入的 HTML 过滤器是一项极其困难的工作,并且随着每个新浏览器的发布以及人们使用 html 的方式发生变化,它需要不断维护。确保您订阅了您选择的过滤器的新版本并保持最新状态。

标签: html security validation bbcode


【解决方案1】:

它的主要优点是防止不需要的代码注入。这就是为什么我会使用 BBCode 或 Markdown 之类的东西。

至少您应该使用允许的 HTML 标记的白名单而不是黑名单。

【讨论】:

  • 每个(正文)标签都可以在其属性上附加脚本,例如风格。您还需要一份 attr 名称的白名单。
【解决方案2】:

BBCode 消除了您的 HTML 过滤器可能存在错误的问题,以便评论者可以评论他不应该评论的代码。 如果您确信您的 HTML 过滤器足够安全,那么您应该没问题。

另一个问题是 HTML cmets 可能会破坏您的布局,例如当评论者输入一个结尾 </div> 或类似的东西时。

【讨论】:

  • 不,它没有。 BBCode 解析器也可能存在允许 XSS 的错误。
【解决方案3】:

BBCode 之所以流行,是因为它允许用户有限地访问 html,同时试图阻止 XSS。 BBCode 在那之前就开始流行了,像HTML Purifier 这样的解决方案。实际上,BBCode 和 Html Purifier 都有自己的安全问题。只是 BBCode 是解决这个问题的更简单的方法。

【讨论】:

    【解决方案4】:

    使用 BBcode + 将所有左侧标记转换为 htmlspecialchar 对我来说似乎完全没有 XSS。 (除非 BBcode 解析器的设计真的超级糟糕)

    最终,他们俩都达到了同一个目标。目前我选择 BBcode 是因为 HTMLpurifier 自动去除标签,而不是用 html specialChar 替换左标签。至少在演示中我没有看到保留左标签的功能。

    所以有一些问题,因为我们希望用户写 <而不是自动将其转换为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2018-05-10
      • 2014-03-12
      • 2012-12-13
      • 2013-11-07
      相关资源
      最近更新 更多