Ruby on rails 3 rails用户输入与<;脚本>;,存储和显示
我有一个应用程序,它收集用户输入并存储到数据库,然后向用户显示 一名用户在名称字段中输入“警报(1)”并将其保存到数据库中 无论何时显示名称,页面都将被打断 我知道如何仅通过验证输入和h()输出来修复该输入 然而,我有太多的输入字段和太多的输出来接受用户的文本 有没有简单的方法来防止这种情况发生(即重写params方法等)Ruby on rails 3 rails用户输入与<;脚本>;,存储和显示,ruby-on-rails-3,Ruby On Rails 3,我有一个应用程序,它收集用户输入并存储到数据库,然后向用户显示 一名用户在名称字段中输入“警报(1)”并将其保存到数据库中 无论何时显示名称,页面都将被打断 我知道如何仅通过验证输入和h()输出来修复该输入 然而,我有太多的输入字段和太多的输出来接受用户的文本 有没有简单的方法来防止这种情况发生(即重写params方法等) 我还想知道你们这些专家是如何处理这个问题的?从Rails 3开始,我的理解是嵌入的ruby代码默认是html转义的。您不需要使用h()来实现这一点。也就是说,如果在视图中使
我还想知道你们这些专家是如何处理这个问题的?从Rails 3开始,我的理解是嵌入的ruby代码默认是html转义的。您不需要使用
h()
来实现这一点。也就是说,如果在视图中使用
,字符串将被设置为html安全的,因此脚本不会执行。您必须特别使用raw()
或类似的方法来避免它-除非您对内容非常有信心,否则您自然不应该这样做 对于输出,Rails 3自动对所有文本进行html编码,除非我使用raw()方法
对于输入,制作一个公共验证器并应用于所有文本或字符串字段如何?这是可取的吗
class MyValidator/]则“不允许使用脚本标记”
结束
结束
结束
结束
class MyValidator < ActiveModel::Validator
def validate(record)
record.class.columns.each do |c|
if c.type==:text || c.type == :string
record.errors.add c.type, "script tag is not allowed" if c[/<script[^>]*>/]
end
end
end
end