Rails新手在官方Rails指南上工作。
我不明白如何使用强参数作为安全网关,因为用户仍然可以在强参数允许的参数范围内放入恶意文本。
答案 0 :(得分:2)
强参数会阻止您的模型设置不应设置的属性。
想象一下:您的模型User
包含字段name
和role
。显然,您的用户可以更新他们的名字,但他们不应该更新他们的角色。
如果没有强参数,您的控制器可能如下所示:
class UsersController < ApplicationController
def update
@user.update_attributes(params[:user]) # params: {user: {role: 'administrator'}}
end
end
用户将能够更新自己的角色并获得管理员权限。
参数很强:
class UsersController < ApplicationController
def update
@user.update_attributes(params_for_update) # params_for_update: {}
end
private
def params_for_update
params.require(:user).permit(:name)
end
end
保护免受恶意参数是另一个主题。你应该消毒你的params。部分rails也可以这样做 - 例如,通过在查询方法中转义字符串:
User.where(name: "'; drop table users;").to_sql
# => "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"name\" = '''; drop table users;'"