尝试使用我的Rails表单,我发现将<scrip>alert("hello")</script>
插入text_field会给出两个不同的结果。
当我使用该值时,例如在显示页面中,它会被自动转义。
当我在新表单中使用该值时,例如允许用户编辑时,它不会被转义,我会收到警告弹出窗口。
经过大量研究后,我发现text_area有一个逃避布尔值来阻止这个,但不是text_field。谷歌上出现的大部分内容都是关于在erb模板中转义,这在使用表单时似乎不起作用。有一些提示,数据应该被清理到数据库中,但很少有关于最佳方法的指导 - 除了使用旧的解决方案,例如xssterminate,它似乎可以追溯到Rails 2.甚至是RoR安全性指南侧重于消毒erb输出,而不是消除输入。
两个问题。
答案 0 :(得分:1)
loofah-activerecord gem(https://github.com/flavorjones/loofah-activerecord)看起来是在数据进入数据库时清理数据的最佳选择。在模型上使用xss_foliate将默认剥离所有列的标记。
e.g。
class User < ActiveRecord::Base
xss_foliate
...
end
我还没有找到第二点的解决方案,但如果有的话,我会非常想知道它!