如何保护这个PHP表单

时间:2011-03-04 13:40:07

标签: php

我有一个用于编辑用户的表单。用户ID被传递给客户端(在隐藏字段中),以便我知道在将表单发回服务器时要更新的用户。我的问题是,如何防止用户更改DOM中的ID,从而更新他们不应该访问的记录?

我能想到的唯一方法是:

  1. 在会话中保存用户ID。 (疼痛)。
  2. 对用户ID(可能还有其他表单元素)运行salted哈希,并将其作为隐藏表单元素包含在内。 (不是特别安全吗?)
  3. 还有其他方法吗?

    谢谢!

    编辑:嘿,有一些很棒的回复。请注意,登录用户和正在编辑的用户可能是两个不同的用户,例如经理正在编辑员工记录。

4 个答案:

答案 0 :(得分:3)

执行此操作的最佳方法是在提交后检查用户是否有权编辑该用户。

不要使用此数据污染会话,因为它可能会变得混乱,例如当用户多次打开同一页面时。

答案 1 :(得分:0)

这在某种程度上取决于允许用户编辑它的条件。

其核心是:

  1. 验证用户
  2. 检查用户是否有权进行更改
  3. 对用户进行身份验证通常是“用户名和密码是否匹配?”的情况。或“与登录用户有活动会话吗?”

    授权取决于您的业务逻辑。它可能是“登录用户是否与正在编辑的用户相同?”或“正在编辑的用户是否有一个包含登录用户ID的管理器字段?”等等。

    在第一种情况下,在会话中存储用户ID不应该是痛苦的。在第二种情况下,您只需将数据库查找作为您在脚本中执行的第一项操作之一。

答案 2 :(得分:0)

为什么依靠隐藏字段来了解要更新的记录?如果用户已登录,则您应该已在会话中拥有他的user_id。 因此,您可以通过查找登录的用户来查找要更新的记录。

答案 3 :(得分:-1)

如前所述,对此进行排序的最快速,最轻松的方法是将USER_ID粘贴在会话期间。

评论说你用这些信息“污染”会话显然没有受过教育,忽略它们。

我在评论中注意到的另一件事是“检查用户是否有权编辑条目”这意味着存在某种分层系统,这似乎并非如此。

如您所假设的那样,会话存储的替代方法是以某种方式模糊隐藏字段中的USER_ID值。你可以加密它,或者加密整数ID - 你可以使用GUID但它有自己的含义,这使得某人“猜测”正确的GUID来处理记录非常困难。