繁体   English   中英

如何保护这个PHP表单

[英]How to secure this PHP form

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

我能想到的唯一方法是:

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

还有其他方法吗?

谢谢!

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

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

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

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

在它的核心,它归结为:

  1. 验证用户
  2. 检查用户是否有权进行更改

验证用户通常是“用户名和密码匹配吗?”的情况。 或“是否存在与其关联的登录用户的活动会话?”

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM