在Rails上安全地传递嵌套表单的隐藏ID

时间:2015-02-25 20:39:03

标签: ruby-on-rails forms security nested-attributes

我有用户和个人资料模型。用户has_one个人资料belongs_to用户。配置文件也accepts_nested_attributes_for :user,我正在为Profile创建一个表单,它也为用户提供了一些属性。

为了让我的profile.user更新(未创建),我必须在用户表单的嵌套属性下提供id,我通过隐藏的输入执行此操作。

问题在于我不认为这是安全的,因为可能会更改客户端的ID,而服务器会更新另一个用户实例,而不是配置文件的用户实例。

为避免这种情况,在Profile的控制器上,我手动将user_attributes的ID添加到与current_user.id对应的参数上,但我认为这不是最好的方式去做吧。

有没有其他方法可以确保Rails更新实际个人资料的用户,或者,如果客户端提供的用户ID不同于profile.user,它会阻止它吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是URI,例如/user/123/profile,则可以从URI params获取用户的ID,如果匹配则将其与current_user.id进行比较,很好,如果没有,错误。