我有一个用于编辑用户的表单。用户ID被传递给客户端(在隐藏字段中),以便我知道在将表单发回服务器时要更新的用户。我的问题是,如何防止用户更改DOM中的ID,从而更新他们不应该访问的记录?
我能想到的唯一方法是:
还有其他方法吗?
谢谢!
编辑:嘿,有一些很棒的回复。请注意,登录用户和正在编辑的用户可能是两个不同的用户,例如经理正在编辑员工记录。
答案 0 :(得分:3)
执行此操作的最佳方法是在提交后检查用户是否有权编辑该用户。
不要使用此数据污染会话,因为它可能会变得混乱,例如当用户多次打开同一页面时。
答案 1 :(得分:0)
这在某种程度上取决于允许用户编辑它的条件。
其核心是:
对用户进行身份验证通常是“用户名和密码是否匹配?”的情况。或“与登录用户有活动会话吗?”
授权取决于您的业务逻辑。它可能是“登录用户是否与正在编辑的用户相同?”或“正在编辑的用户是否有一个包含登录用户ID的管理器字段?”等等。
在第一种情况下,在会话中存储用户ID不应该是痛苦的。在第二种情况下,您只需将数据库查找作为您在脚本中执行的第一项操作之一。
答案 2 :(得分:0)
为什么依靠隐藏字段来了解要更新的记录?如果用户已登录,则您应该已在会话中拥有他的user_id。 因此,您可以通过查找登录的用户来查找要更新的记录。
答案 3 :(得分:-1)
如前所述,对此进行排序的最快速,最轻松的方法是将USER_ID粘贴在会话期间。
评论说你用这些信息“污染”会话显然没有受过教育,忽略它们。
我在评论中注意到的另一件事是“检查用户是否有权编辑条目”这意味着存在某种分层系统,这似乎并非如此。
如您所假设的那样,会话存储的替代方法是以某种方式模糊隐藏字段中的USER_ID值。你可以加密它,或者加密整数ID - 你可以使用GUID但它有自己的含义,这使得某人“猜测”正确的GUID来处理记录非常困难。