Javascript 我们需要显式地清理rails中的强参数吗? class ApplicationController”).gsub(“,”

Javascript 我们需要显式地清理rails中的强参数吗? class ApplicationController”).gsub(“,”,javascript,ruby-on-rails,ruby-on-rails-4,sanitize,Javascript,Ruby On Rails,Ruby On Rails 4,Sanitize,Rails)将按原样保存输入,但在处理输入时总是将其转义 对于未初始化的(html/脚本)字符串,您需要显式调用raw或html\u-safe。没错,但是如果您需要将存储的结果提供给其他平台,如为android或IOS服务的API服务,该怎么办?这取决于您如何传递它。如果您刚刚传递了params[:my\u param\u name]到API/服务,默认情况下它将被转义。它不会在数据库中转义,仅当您调用/使用params或模型属性时才转义。raw或html_safe将不起作用。Rails还附带s

Rails)将按原样保存输入,但在处理输入时总是将其转义


对于未初始化的(html/脚本)字符串,您需要显式调用
raw
html\u-safe

没错,但是如果您需要将存储的结果提供给其他平台,如为android或IOS服务的API服务,该怎么办?这取决于您如何传递它。如果您刚刚传递了
params[:my\u param\u name]
到API/服务,默认情况下它将被转义。它不会在数据库中转义,仅当您调用/使用
params
或模型属性时才转义。raw或html_safe将不起作用。Rails还附带sanitize()方法。您需要调用sanitize()方法,即使在模型属性上也是如此。此外,即使在任何帮助程序或视图本身中调用参数,也不会转义它。强参数会被清除,以防止任何SQL查询注入,因此这里不是这种情况。
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>"