如果保护Rails控制器中的编辑操作,以便,例如,只有登录的用户可以编辑他或她自己的配置文件,而没有其他人,是否还需要保护同一控制器中的更新方法,或者是它足以单独保护编辑方法?
def edit
if current_user != User.find(params[:id])
sound_loud_alarm
elsif current_user = User.find(params[:id])
allow_user_to_edit
else
end
end
取决于您的路由/网址的方式。如果你在url中公开了user-id,你肯定应该因为一旦登录,我就很容易尝试重置其他人的密码。黑客很容易显示自己的表单,然后在发布之前执行inspect
并编辑表单。
如果您使用GET :profile
和POST/PUT :profile
这样的网址,它允许用户仅查看和编辑自己的个人资料,他们就不能再尝试编辑其他人的个人资料(因为用户/个人资料数据与登录会话之间的链接是服务器端)。
如果您使用UUID网址,您的网址已经更加安全(更难以猜到其他网址),但这仍然不安全,因此您应该验证发布更新的会话的所有者是否相同。