【问题标题】:Rails comments system with bb-code带有 bb-code 的 Rails 评论系统
【发布时间】:2014-02-23 10:09:10
【问题描述】:

在我的 rails 4 应用程序中,我想将 cmets 添加到我的文章中,但我想像大多数论坛引擎一样添加功能(如 SMF),并且我需要为其添加 bb-code。

有什么好的宝石吗?支持rails 4?那么如何在控制器中将 [quote] 翻译为具有某种风格的某些 div?

另外,在数据库中存储 html 数据有什么好处?

例如,如果我使用 haml,并且有人发表评论

- current_user.id

或类似的东西,如何保护我的应用免受“坏男孩”的侵害?当然,我可以将 cmets 系统更改为:quote_parent_id,但如果我在一条评论中有多个引号?所以很难实现,最好是存储 html,但要以某种方式保护它。

我可以这样做吗?如何?请提供好的想法、教程、gem-links。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 bbcode


    【解决方案1】:

    查看https://github.com/veger/ruby-bbcode

    由于它转换为 HTML 并且不会将用户输入作为 Ruby 代码执行 - 您将相当安全。但是,我还没有尝试过 gem,它可能会引入一些 XSS 漏洞。

    您是否考虑过将Markdown 作为一个选项?

    【讨论】:

    • "降价作为选项?"你是什​​么意思?
      等?不 - 这是个坏主意)
    • hm,使用这样的 js: $('#article_comment_text').val(currentVal + '[quote author="' + comment_author + '" date="' + comment_date + '"]' +评论文本 + '[/quote]');它使我成为

      [quote author="

      Гость

    • 更新了问题,带有指向 Markdown 的链接。你试过我链接的 BBcode gem 吗?
    • 我试试,就是那个多引号 - 问题
    • 我们有一个issue about XSS vulnerabilities,应该修复它。如果您知道其他问题,请let us know,我们会尽力解决!
    【解决方案2】:

    您还应该查看https://github.com/asceth/bbcoder(我应该注意我是原作者)。

    在控制器中,将诸如“[quote=user]My post of epic evidence[/quote]”之类的字符串更改为 div 等就是这样做的:

    # assume params[:comment] is the text you are converting
    params[:comment].bbcode_to_html
    

    关于将 html 存储在数据库中,没有正确或错误的答案。如果您想允许用户稍后编辑他们的帖子,那么我倾向于不存储 html 版本,而是存储他们的原始 bbcode 版本。这样,当您允许他们进行编辑时,您不必将 html 转换回 bbcode。

    为确保您不会受到 XSS 和其他攻击,我建议您结合使用其他 gem,例如 sanitize。

    Sanitize.clean(text.to_s).bbcode_to_html
    

    还有一些注意事项:

    多个标签和嵌套标签按其所见即被解析,无需任何额外步骤。因此,只需在变量/字符串上调用 bbcode_to_html 即可处理包含大量 bbcode 标签、多个引号、b 标签或其他任何内容的评论或帖子。

    如果用户尝试在他们的帖子中使用 haml,它应该按原样显示。 haml 不应该尝试评估字符串,除非你明确告诉它我什至不知道该怎么做,除非 haml 作为一个特殊的过滤器或运算符。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签