我们是否需要明确消毒轨道中的强对手?

时间:2016-12-07 06:40:43

标签: javascript ruby-on-rails ruby-on-rails-4 sanitize

class ApplicationController < ActionController::Base
....

  def sanitize(value)
     ActionController::Base.helpers.sanitize(value.try(:strip)).gsub('&amp;', '&').gsub('&gt;', '>').gsub('&lt;', '<') if value.present?
  end

end

并在资源中

class UsersController < ApplicationController
...
 def update
  if current_user.update(update_users_params)
    redirect_to root_path
  end
end

private


 def update_users_params
    params.require(:user).permit(username: sanitize(params[:user] [:username]),
                  location: sanitize(params[:user][:location]))
 end

此处位置和用户名是用户模型属性。

不使用清理方法的实际行为:

如果我们将"Hey <script type='text/javascript'> alert('Hi') </script>"添加到用户表单的用户名或位置输入字段,则在表单提交后将其存储为

 "Hey <script type='text/javascript'> alert('Hi') </script>"

在存储到数据库之前,我们是否需要清理脚本标记的这些属性? 和

强大的参数是否不会从这些属性中清除脚本标记?

1 个答案:

答案 0 :(得分:0)

Rails将按原样保存输入,但在使用它时它将始终将其转义。

您需要明确调用rawhtml_safe以获取未经过清理的(html / script)字符串。