gpt4 book ai didi

ruby-on-rails - Rails 3 - 防止 form_for DOM 操作更改

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:03 26 4
gpt4 key购买 nike

概括this question我今天早上问过,如果之前有人问过这个问题并且我根本不知道要搜索什么,请接受我的道歉,但我很好奇 Rails 如何处理以下情况:

  1. 我使用 Devise 登录 ID 为 2 的用户。
  2. 我单击已创建的链接以“编辑我的个人资料”(该链接将转到/users/2/edit 页面)。
  3. 使用 Firebug(或类似的东西),我修改了表单并将操作从 action='/users/2' 更改为 action='/users/5'.
  4. 我更改了表单上的一个元素,然后点击提交。

此时,Rails 似乎允许使用我的更改提交和更新 ID 为 5 的用户。

我猜我不是第一个问这个问题的人。在我看来,Rails 应该“开箱即用”地处理这个问题,但我可能是错的。 Rails 是否在 native 处理此问题,而我只是遗漏了一些东西?之前是否有人在 SO 或我遗漏的其他地方问过这个问题?

最佳答案

一些事情:

  • 不要创建接受 DB id 的路由。相反,使其类似于 /my_profile
  • 如果在参数中传递了 id,则在 Controller 中完全忽略它。而是查找已登录的 current_user 并向他们显示他们自己的个人资料,而不管传入的个人资料/用户 id 是什么。
  • 最后,可能也是最重要的一点,使用授权(允许用户执行的操作)以禁止一个用户编辑另一个用户的个人资料。不要与身份验证(用户登录/注销)混淆。

使用这种方法,DOM 是否更改都无关紧要,因为服务器永远不应隐式信任传递给它的内容,这就是您现在面临的问题。任何网络/应用程序服务器都必须始终确认传递给它的参数在允许当前用户执行的操作的上下文中确实有效。

服务器不应该永远信任传递给它的内容这一想法是一个关键的想法,可以毫无异常(exception)地应用于您应用中的每一个 Action 。

关于ruby-on-rails - Rails 3 - 防止 form_for DOM 操作更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15992323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com