如何保护这个PHP表单
我有一个用于编辑用户的表单。用户ID被传递给客户机(在一个隐藏字段中),这样我就知道在表单发回服务器时更新哪个用户。我的问题是,如何防止用户更改DOM中的ID,从而更新他们不应该访问的记录 我能想到的唯一办法是:如何保护这个PHP表单,php,Php,我有一个用于编辑用户的表单。用户ID被传递给客户机(在一个隐藏字段中),这样我就知道在表单发回服务器时更新哪个用户。我的问题是,如何防止用户更改DOM中的ID,从而更新他们不应该访问的记录 我能想到的唯一办法是: 在会话中保存用户ID。(痛苦的) 在用户ID(可能还有其他表单元素)上运行salted散列,并将其作为隐藏表单元素包含。(不是特别安全?) 还有其他方法吗 谢谢 编辑:嘿,有一些很棒的回应。请注意,登录用户和正在编辑的用户可能是两个不同的用户,例如,经理正在编辑员工记录。这在某种程度上
编辑:嘿,有一些很棒的回应。请注意,登录用户和正在编辑的用户可能是两个不同的用户,例如,经理正在编辑员工记录。这在某种程度上取决于允许用户编辑记录的条件 其核心是:
在第一种情况下,在会话中存储用户id应该不会很痛苦。在第二种情况下,您只需在脚本中首先执行数据库查找。最好的方法是在提交后检查用户是否有权编辑该用户
不要用这些数据污染会话,因为它可能会变得混乱,例如当用户多次打开同一页时。为什么要依赖隐藏字段来知道要更新哪个记录?如果用户已登录,您应该已经在会话中拥有了他的用户id。
因此,您可以通过查找登录的用户来查找要更新的记录。如前所述,对其进行排序的最快、最简单的方法是在会话期间粘贴用户ID 说你用这些信息“污染”会话的评论显然是没有受过教育的,忽略它们 我在评论中注意到的另一件事是“检查用户是否有权编辑条目”,这意味着存在某种等级制度,这似乎不是真的
正如您已经假设的那样,会话存储的替代方法是以某种方式混淆隐藏字段中的用户ID值。您可以对其进行加密,也可以不使用整数ID—您可以使用GUID,但这有其自身的含义,尽管这会让人很难“猜测”正确的GUID来混淆记录。在会话中保存用户ID绝对是唯一明智的选择。为什么会很痛苦?这不是您已经在会话中保存的信息吗?在您的情况下,Salted hash也是非常安全的。问题的含义是允许一个用户编辑其他用户,而不是他们自己(但不是所有用户),如果是这种情况,则在隐藏字段中有用户id是可以的,但是,请在服务器上执行另一次安全检查,以验证登录用户是否具有编辑表单提交的用户id的权限