Rails形成text_field转义html

时间:2015-04-05 23:27:29

标签: ruby-on-rails security xss

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

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

当我在新表单中使用该值时,例如允许用户编辑时,它不会被转义,我会收到警告弹出窗口。

经过大量研究后,我发现text_area有一个逃避布尔值来阻止这个,但不是text_field。谷歌上出现的大部分内容都是关于在erb模板中转义,这在使用表单时似乎不起作用。有一些提示,数据应该被清理到数据库中,但很少有关于最佳方法的指导 - 除了使用旧的解决方案,例如xssterminate,它似乎可以追溯到Rails 2.甚至是RoR安全性指南侧重于消毒erb输出,而不是消除输入。

两个问题。

  1. 在保存text_field输入之前,当前最佳实践方法是什么? (例如:在形式,控制器或模型中。什么宝石仍然被认为是最新的?)
  2. 无论如何,因为我是偏执狂,在显示数据库数据时如何清理text_field?

1 个答案:

答案 0 :(得分:1)

loofah-activerecord gem(https://github.com/flavorjones/loofah-activerecord)看起来是在数据进入数据库时​​清理数据的最佳选择。在模型上使用xss_foliate将默认剥离所有列的标记。

e.g。

class User < ActiveRecord::Base
  xss_foliate

  ...
end

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