我是否可以在我计划向其他用户显示的用户输入的文本上使用ActionView::Helpers::SanitizeHelper#sanitize?它能正确地处理本网站描述的所有案例吗?
此外,文件还提到:
请注意,清理用户提供的文本并不能保证结果标记有效(符合文档类型),甚至不能保证格式良好。输出可能仍然包含未转义的“<”、‘’>、‘&’字符,并混淆浏览器.
处理这件事最好的方法是什么?在显示前通过Hpricot传递经过消毒的文本?
发布于 2011-02-17 17:15:43
Ryan的消毒比Rails 3 sanitize要远得多。它确保输出HTML格式良好,并有三个内置白名单:
Sanitize::Config::RESTRICTED只允许非常简单的内联格式标记。没有链接、图像或块元素。
Sanitize::Config::BASIC允许各种标记,包括格式化标记、链接和列表。不允许使用图像和表,链接仅限于FTP、HTTP、HTTPS和mailto协议,并在所有链接中添加一个属性以减少SEO垃圾邮件。
Sanitize::Config::RELAXED允许比基本标记更广泛的标记,包括图像和表。链接仍然仅限于FTP、HTTP、HTTPS和mailto协议,而图像仅限于HTTP和HTTPS。在此模式下,不添加到链接中。
发布于 2010-10-27 01:55:34
清洁当然比"h“助手更好。它实际上允许您指定的html标记,而不是转义所有内容。是的,它确实防止跨站点脚本编写,因为它完全删除了混合脚本中的javascript。
总之,两者都能完成任务。使用"h“,当你不期待除明文以外的任何东西,当你想要允许的时候使用消毒,或者你相信人们可能试图进入它。即使您不允许所有标记都使用消毒,它也会删除代码,而不是像"h“那样转义它们,从而”美化“代码。
至于不完整的标签:您可以在模型上运行一个验证,该模型将包含html的字段传递给hpricot,但我认为这在大多数应用程序中都是过分的。
发布于 2010-06-07 07:41:09
最佳的行动方针取决于两件事:
一般情况下,我不允许用户输入html,而是让他们输入纺织品。
On rails 3.x:
默认情况下,用户输入是净化的。您不需要做任何事情,除非您希望您的用户能够发送一些html。在这种情况下,继续阅读。
这条铁路处理对rails 3的XSS攻击。
On rails 2.x:
如果不允许用户提供任何html,只需使用h方法保护输出,如下所示:
<%= h post.text %>如果您希望用户发送一些html:您可以使用rails的sanitize方法或HTML::StathamSanitizer
https://stackoverflow.com/questions/2985600
复制相似问题