在我的rails 4应用程序中,我想为我的文章添加评论,但我想像大多数论坛引擎一样添加功能(如SMF),我需要为此添加bb代码。
有什么好的宝石吗?有轨道4支撑?那么,在控制器中,我如何将[quote]翻译成某种风格的div?
此外,在数据库中存储html数据有什么好处?
例如,如果我使用haml,并且有人将评论作为发布
- current_user.id
或者类似的事情,如何保护我的应用程序免受"坏男孩"的攻击?当然,我可以将注释系统更改为:quote_parent_id,但如果我在一个注释中有多个引号?所以这很难实现,最好是存储html,但要以某种方式保护它。
我能做这个吗?如何?请提供好的想法,教程,宝石链接。
查看https://github.com/veger/ruby-bbcode
由于它可以转换为HTML,并且不会像Ruby代码那样出色地进行用户输入,因此您将相当安全。然而,我还没有尝试过gem,它可能会引入一些XSS漏洞。
你考虑过降价吗?
您还应该了解https://github.com/asceth/bbcoder(我应该注意,我是原作者)。
在控制器中,将诸如"[quote=user]My post of epic importance[/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
更多注意事项:
在不需要任何额外步骤的情况下,多个标记和嵌套标记将在可见时进行解析。因此,只需对变量/string调用bbcode_to_html
,就可以处理带有大量bbcode标记、多个引号、b标记或其他任何内容的评论或帖子。
如果用户试图在帖子中使用haml,它应该显示为原样。haml不应该尝试评估字符串,除非你特别告诉它,我甚至不知道如何做到这一点,除非haml是一个特殊的过滤器或运算符。