【问题标题】:Rails form text_field escaping htmlRails 表单 text_field 转义 html
【发布时间】:2015-04-05 23:27:28
【问题描述】:

使用我的 Rails 表单进行实验,我发现将 <scrip>alert("hello")</script> 插入 text_field 会给我两个不同的结果。

当我使用该值时,例如在显示页面中,它会自动转义。

当我在新表单中使用该值时,例如允许用户编辑时,它不会被转义,并且会弹出警报。

经过大量研究,我发现 text_area 有一个转义布尔值可以防止这种情况发生,但 text_field 没有。谷歌上出现的大部分内容都是关于在 erb 模板中转义,这在使用表单时似乎不起作用。有一些提示表明应该对进入数据库的数据进行清理,但是关于执行此操作的最佳方法的指导很少——除了使用旧的解决方案,例如 xssterminate,它似乎可以追溯到 Rails 2。即使是 RoR 安全指南侧重于清理 erb 输出而不是清理输入。

两个问题。

  1. 在保存 text_field 输入之前,当前的最佳实践方法是什么? (例如:在表单、控制器或模型中。哪些 gem 仍然被认为是当前的?)
  2. 不管怎样,因为我是偏执狂,你如何在显示 db 数据时对 text_field 进行清理?

【问题讨论】:

    标签: ruby-on-rails security xss


    【解决方案1】:

    loofah-activerecord gem (https://github.com/flavorjones/loofah-activerecord) 看起来是在进入数据库的过程中清理数据的最佳选择。默认情况下,在您的模型上使用 xss_foliate 将去除所有列的标签。

    例如

    class User < ActiveRecord::Base
      xss_foliate
    
      ...
    end
    

    我还没有找到第二点的解决方案,但如果有的话我很想知道!

    【讨论】:

    • 我已经使用了一个自定义方法,如果它包含 、?、"、' 或 / 中的任何一个,它会拒绝用户输入,并向错误 [:base] 添加一条消息。我有- 将您的答案标记为有用,但我认为问题仍然悬而未决:-)
    猜你喜欢
    • 2011-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2012-11-11
    • 2020-11-08
    相关资源
    最近更新 更多