【问题标题】:Ruby on Rails and XSS preventionRuby on Rails 和 XSS 预防
【发布时间】:2009-08-12 14:40:39
【问题描述】:

在 Ruby on Rails 中防止 XSS 的做法是什么? 我在网上找到了很多旧文档,而且大部分时间都是关于使用 h/html_escape 帮助器转义来自用户的任何变量。

我从较新的文档中了解到,在 2.0 及更高版本中有 sanitize 自动清理输入的方法 恶意输入。是否足够,或者您是否正在做更多的事情来保护您的 应用?

【问题讨论】:

    标签: ruby-on-rails ruby security xss


    【解决方案1】:

    h 方法仍然是转义字符串中所有 HTML 的方法。您应该在输出内容的任何地方都使用此方法。

    <%=h @recipe.description %>
    

    这种行为将在 Rails 3 中发生变化。默认情况下,所有输出都将被转义,您需要明确指定不转义它。同时,如果您经常忘记使用此h 方法,您可能需要查看Safe ERB plugin

    sanitize 方法是有选择地从内容中去除某些标签的好方法。例如,如果您想允许用户在添加链接的同时将其输出加粗和斜体,您可以这样做。

    <%= sanitize @recipe.description, :tags => %w[b i a], :attributes => %w[href] %>
    

    正如 Oliver 所说,请查看Security Guide 了解更多信息。

    【讨论】:

      【解决方案2】:

      Ruby on Rails Security Guide 相当详尽地阐述了您在为网站设计安全性时应考虑的特定于 Rails 的问题。

      【讨论】:

        【解决方案3】:

        就最佳实践而言,我会推荐以下内容:

        1. 始终使用 rails 表单助手(form_for 等),如果您编写自己的表单,您就会面临 CSRF 攻击。

        2. 虽然使用 h() 函数会在将文本写入页面时对其进行转义,但您最终仍会在数据库中保存 XSS 漏洞。使用XSS_terminate 插件会在保存时删除输入。

        3. 不要忘记您的应用程序运行在一堆其他应用程序(Rails、Apache、MySQL、您选择的操作系统)上,每个应用程序都有自己的安全问题。

        【讨论】:

          【解决方案4】:

          Rails sanitize 方法很不错,但它并不能保证格式良好,而且由于安装基础,它很可能会受到攻击。更好的做法是使用 html5lib(如果不是最快或最 ruby​​ish 的话,确实是最好的)或 SanitizeLoofah

          【讨论】:

            猜你喜欢
            • 2015-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-29
            • 1970-01-01
            • 1970-01-01
            • 2020-02-01
            • 2012-01-09
            相关资源
            最近更新 更多