在我的 MVC 应用程序中,我有一个页面供用户编辑其帐户详细信息,例如电子邮件地址、密码等。在我的数据库中,用户表保存此数据,主键是 UserId。
在我创建的 ChangeAccountDetails 视图上,我传递了一个 ViewModel,其中包含用户应该能够在其帐户上修改的数据。我还将 UserId 存储在 ViewModel 中,该视图模型呈现在我的实际视图上的隐藏字段中。我担心这不安全,因为在保存更改的数据的 POST 操作中,我的服务层会加载刚刚由 ViewModel 中发回的 UserId 更改的用户帐户详细信息的持久版本。
我已使用 Fiddler 更改 POST 请求,并将 UserId 更改为数据库中另一个用户记录的 UserId,这可能会产生严重问题,因为有人可能会以这种方式更改其他人的密码和/或其他详细信息。
请有人建议我在使用 ViewModel 时如何避免此类问题。在这种情况下使用 Session 是唯一的方法吗(我知道最好避免使用 Session 但为此目的又如何)?
我通过加密 sessionKey 的方法来完成此操作,该加密密钥保存用户详细信息,例如 ID 等。表单上 ID 的隐藏字段始终为零,并且将其更改为我的 user.UserId 的 ID。
我有一个用户模型(用户),该模型填充了会话中的解密数据,这就是我处理用户级别等的方式。
我未加密的字符串如下所示: userid||email||datetimelogin||users-GUID||真实姓名||用户级别
然后使用自己的私钥在 255 处对其进行加密。
只是一个想法,很好的一点,但我想对于大多数人来说,很容易忘记人们可以篡改 ID。
zasz 的上述想法也完全有效,但是您必须构建一个视图模型来解释 GUID 的额外字段并解释丢失的 UserId 字段。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)