Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 rails用户输入与<;脚本>;,存储和显示_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 3 rails用户输入与<;脚本>;,存储和显示

Ruby on rails 3 rails用户输入与<;脚本>;,存储和显示,ruby-on-rails-3,Ruby On Rails 3,我有一个应用程序,它收集用户输入并存储到数据库,然后向用户显示 一名用户在名称字段中输入“警报(1)”并将其保存到数据库中 无论何时显示名称,页面都将被打断 我知道如何仅通过验证输入和h()输出来修复该输入 然而,我有太多的输入字段和太多的输出来接受用户的文本 有没有简单的方法来防止这种情况发生(即重写params方法等) 我还想知道你们这些专家是如何处理这个问题的?从Rails 3开始,我的理解是嵌入的ruby代码默认是html转义的。您不需要使用h()来实现这一点。也就是说,如果在视图中使

我有一个应用程序,它收集用户输入并存储到数据库,然后向用户显示

一名用户在名称字段中输入“警报(1)”并将其保存到数据库中

无论何时显示名称,页面都将被打断

我知道如何仅通过验证输入和h()输出来修复该输入

然而,我有太多的输入字段和太多的输出来接受用户的文本

有没有简单的方法来防止这种情况发生(即重写params方法等)


我还想知道你们这些专家是如何处理这个问题的?

从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