代码之家  ›  专栏  ›  技术社区  ›  Jakub Troszok

Ruby on Rails和XSS保护

  •  7
  • Jakub Troszok  · 技术社区  · 16 年前

    在RubyonRails中防止XSS的做法是什么? 我在网上发现了很多旧文档,大部分时间都是关于使用 H/HTMLI逃生 用于转义来自用户的任何变量的帮助程序。

    我从更新的文档中了解到,在2.0及更高版本中 消毒 自动从假定的 恶意输入。是否足够,或者您是否在做更多的事情来保护您的 应用?

    4 回复  |  直到 16 年前
        1
  •  11
  •   Oliver N.    16 年前

    这个 Ruby on Rails Security Guide 在为网站设计安全性时,您应该充分考虑Rails的特定问题。

        2
  •  15
  •   ryanb    16 年前

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

    <%=h @recipe.description %>
    

    此行为将在Rails 3中发生更改。默认情况下,所有输出都将被转义,您需要显式指定以不转义它。同时,如果你经常忘记使用这个 H 您可能希望签出的方法 Safe ERB plugin .

    这个 sanitize 方法是一种从内容中选择性地删除某些标记的好方法。例如,如果您希望允许用户用粗体和斜体显示其输出以及添加链接,您可以这样做。

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

    正如奥利弗提到的,看看 Security Guide 更多信息。

        3
  •  4
  •   Mike Buckbee    16 年前

    就最佳实践而言,我建议如下:

    1. 始终使用Rails表单帮助器(Form_for等),如果您编写自己的表单,那么您就可以向CSRF攻击敞开心扉。

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

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

        4
  •  2
  •   gtd    16 年前

    Rails清理方法很好,但是它不能保证格式良好,而且很可能由于安装基础而受到攻击。更好的做法是使用HTML5LIB(如果不是最快或最鲁莽的话,那就是最好的),或者 Sanitize Loofah