【问题标题】:Rails - Escaping HTML using the h() AND excluding specific tagsRails - 使用 h() 转义 HTML 并排除特定标签
【发布时间】:2009-09-29 20:08:29
【问题描述】:

我想知道,目前还无法在网上找到任何答案,如何完成以下操作。

假设我有一个包含以下内容的字符串:

my_string = "你好,我是字符串。" (在预览窗口中,我看到这实际上是粗体和斜体格式,而不是显示“strong”和“i”标签)

现在,我想使用 html_escape()(或 h())方法/函数来确保它的安全。 所以我想阻止用户插入任何 javascript 和/或样式表,但是,我仍然希望单词“Hello”以粗体显示,而单词“string”以斜体显示。

据我所知,h() 方法除了文本本身之外不接受任何其他参数。

有没有办法只转义某些 html 标签,而不是全部?喜欢白色或黑色列表标签?

这可能是什么样子的示例,我想说的是:

h(my_string, :except => [:strong, :i]) # => 所以基本上,转义所有内容,但单独留下“strong”和“i”标签,不要转义这些。

有什么方法或方法可以做到这一点吗?

提前致谢!

【问题讨论】:

    标签: html ruby-on-rails security escaping


    【解决方案1】:

    排除特定标签实际上是一个相当困难的问题。尤其是script 标签可以插入very many different ways - 检测它们非常棘手。

    如果可能,请不要自己实现。

    【讨论】:

      【解决方案2】:

      使用white list 插件或modified 版本。太棒了! 你也可以看看Sanitize(好像更好,不过没试过)。

      【讨论】:

        【解决方案3】:

        您是否考虑过使用RedClothBlueCloth 而不是实际允许HTML?这些方法提供了相当多的格式化选项并为您管理解析。

        编辑 1: 在浏览如何使用 RedCloth 删除 HTML 时,我发现 this message 可能有用。此外,this page 向您展示了 2.0.5 版如何允许您删除 HTML。似乎找不到任何更新的信息,但forum post 发现了一个漏洞。希望它自 2006 年以来已得到修复,但我似乎找不到 RedCloth 手册或文档...

        【讨论】:

        • RedCloth 很棒,但它不会去除任何 html 标签;我可以插入 并且它不会被转义。我不确定 BlueCloth 如何剥离 HTML;我以前没用过。
        【解决方案4】:

        我会第二次清理以删除 HTML 标记。它真的很好用。它默认会删除所有内容,您可以为要允许的标签指定白名单。

        【讨论】:

          【解决方案5】:

          防止 XSS 攻击是一件严肃的事情,请遵循 hrnt 的建议,并考虑到由于浏览器的隐晦怪癖,可能存在比可能更多的漏洞利用数量级。尽管 html_escape 会非常严格地锁定事物,但我认为使用任何本土开发的东西来处理这类事情是错误的。您只需要更多的关注和同行​​评审即可获得任何类型的稳健性保证。

          我目前正在评估sanitizeXssTerminate。我更喜欢 xss_terminate 方法,因为它的健壮性——在所有用户输入都通过 ActiveRecord 的常规 Rails 应用程序中,在模型级别进行清理将非常可靠,但Nokogiri 尤其是Loofah 似乎更高效,更积极维护,并且绝对更灵活和 Ruby 风格。

          更新我刚刚实现了一个名为 ActsAsSanitiled 的 ActsAsTextiled 分支,它使用 Santize(顺便说一下,最近已更新为使用 nokogiri)来保证安全性和格式良好RedCloth 输出,所有这些都不需要模板中的任何帮助程序。

          【讨论】:

            猜你喜欢
            • 2016-11-07
            • 2018-11-02
            • 2018-09-23
            • 1970-01-01
            • 1970-01-01
            • 2013-01-11
            • 1970-01-01
            • 2020-10-19
            • 2014-04-11
            相关资源
            最近更新 更多