这可能是一个愚蠢的问题,但请耐心等待。
我一直在玩我正在使用的rails应用程序,我在控制台(即rails c
),我决定尝试通过以下方式将用户添加到数据库中控制台。
我的User
模型具有role
属性,该属性已从UsersController
中的强参数列表中排除。但是,当我使用控制台时,我可以通过执行update_attribute
来编辑新用户角色的值。这让我很担心。这是否意味着我没有正确地执行强制参数并且不知何故不能保护我的用户模型免受大规模分配?或者轨道控制台是否故意绕过质量分配?这里有安全漏洞吗?
这是控制台输入/输出:
2.3.1 :004 > user.update_attribute("role", "admin")
(0.1ms) begin transaction
SQL (0.7ms) UPDATE "users" SET "updated_at" = ?, "role" = ? WHERE "users"."id" = ? [["updated_at", "2017-06-21 10:25:34.134203"], ["role", "admin"], ["id", 4]]
(92.1ms) commit transaction
=> true
以下是UsersController
的相关部分:
def create
sleep(rand(5)) # random delay; mitigates Brute-Force attacks
@user = User.new(user_params)
if @user.save #&& verify_recaptcha(model: @user)
if @user.update_attribute('role', 'user')
@user.send_activation_email
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
else
render 'new' #Reset the signup page
end
end
#...
#Defines which fields are permitted/required when making a new user.
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation)
end
提前谢谢。
答案 0 :(得分:2)
user.update_attribute(“role”,“admin”)
它与强参数无关。 这只是生成一个sql查询,就像在控制台中看到的更新记录一样。
强参数用于限制来自视图/客户端的未经许可的参数并修改您的记录。
与你的情况一样,
您的user_params
不包括role
因为您自己分配了role: 'admin'
。如果你没有这样做,我在请求正文中发送了User.new(params)
,
admin
如果verify_recaptcha(model: @user)
条件失败,会使用户 List<String> liveVideoSourceIdList=new ArrayList(){"my_filter"};
Predicate predicate=Predicates.in("myField",liveVideoSourceIdList.toArray(new String[0]));
。