class ApplicationController < ActionController::Base
....
def sanitize(value)
ActionController::Base.helpers.sanitize(value.try(:strip)).gsub('&', '&').gsub('>', '>').gsub('<', '<') 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>"
在存储到数据库之前,我们是否需要清理脚本标记的这些属性? 和
强大的参数是否不会从这些属性中清除脚本标记?
答案 0 :(得分:0)
Rails将按原样保存输入,但在使用它时它将始终将其转义。
您需要明确调用raw
或html_safe
以获取未经过清理的(html / script)字符串。