在我的rails 4应用程序中,我想在我的文章中添加评论,但我想添加功能,就像大多数论坛引擎一样(如SMF),我需要为它添加bb代码。
它有什么好的宝石吗?有轨道4支持?然后如何在控制器中我可以将[quote]翻译成某些风格的div?
将html数据存储在数据库中也有什么好处?
例如,如果我使用haml,而有人发表评论为
- current_user.id
或类似的东西,如何从“坏男孩”中保护我的应用程序?当然,我可以将评论系统更改为:quote_parent_id,但如果我在一条评论中有多个引号?所以很难实现,更好的是存储html,但以某种方式保护它。
我可以这样做吗?如何?请提供好的想法,教程,宝石链接。
答案 0 :(得分:1)
查看https://github.com/veger/ruby-bbcode
由于它转换为HTML并且不会将用户输入作为Ruby代码 - 您将非常安全。但是,我还没有尝试过gem,它可能会引入一些XSS漏洞。
您是否考虑过Markdown?
答案 1 :(得分:0)
您还应该查看https://github.com/asceth/bbcoder(我应该注意到我是原作者)。
在控制器中,将诸如“[quote = user]我的史诗重要性[/ quote]”之类的字符串更改为div等只是在做:
# assume params[:comment] is the text you are converting
params[:comment].bbcode_to_html
至于在数据库中存储html,没有正确或错误的答案。如果你想让用户以后编辑他们的帖子,那么我会倾向于不存储html版本,而是存储他们原来的bbcode版本。这种方式当你允许它们编辑时,你不必将html转换回bbcode。
为了确保您不对XSS和其他攻击持开放态度,我建议结合使用其他宝石,例如清理。
Sanitize.clean(text.to_s).bbcode_to_html
更多说明:
在看到多个标签和嵌套标签时,无需任何额外步骤即可对其进行解析。因此,只需在变量/字符串上调用bbcode_to_html
即可处理包含大量bbcode标记,多个引号,b标记或其他任何内容的评论或帖子。
如果用户尝试在帖子中使用haml,它应该按原样显示。 haml不应该尝试评估字符串,除非你明确告诉它我甚至不知道怎么做,除非将haml作为一个特殊的过滤器或操作符。