gpt4 book ai didi

ASP.NET MVC 2 EditModel 包含 Id?保护 ID 未被篡改

转载 作者:行者123 更新时间:2023-12-02 04:14:08 25 4
gpt4 key购买 nike

在 ASP.NET MVC 应用程序中创建 EditMoels 和更新数据时,我正在寻找一些最佳实践。假设我有一个这样的网址/Post/Edit?Id=25

我确保用户有权在 Get 请求上按 Id 编辑特定帖子,并且对于我在 Controller 中的帖子也是如此。我正在使用 ValidateAntiForgeryToken。

问题:我应该在我的 EditModel 中包含 Id 属性吗?如果是这样,我应该加密它吗?

问题是我可以使用 FireBug 编辑 Id hiddedinput 并编辑不同的帖子,只要我有权这样做。这并不可怕,但似乎是错误的。

任何帮助都会很棒!

最佳答案

有几种方法可以防止这种情况。

第一个 - 根本不向客户端发送敏感数据。将帖子 ID 保存在 session 变量中,以便用户永远无法编辑它。这可能是也可能不是一个选项,具体取决于您的架构。

下一种方法是将直接引用转换为间接引用。例如,您应该发送一个不透明的列表 {1,2,3},而不是发送 postids = {23452, 57232, 91031} 给客户端以呈现下拉列表。服务器单独知道 1 表示 23452,2 表示 57232 等等。这样,用户就不能修改您不希望他修改的任何参数。

最后一种方法是包含某种作为完整性检查添加的哈希值。例如,假设您在一个 html 页面中有 3 个隐藏字段 - {userId=13223, postId=923, role=author}。您首先对字段名称进行排序,然后将这些值连接起来以得到像 postId=923&userId=13223&role=author 这样的字符串。 .然后,将服务器密码附加到此字符串,并对整个字符串进行散列(SHA-1 或 MD5)。例如。 SHA-1('postId=923&userId=13223&role=author&MySuperSecretKey') .最后将此哈希值添加为隐藏参数。您可能还想添加另一个名为 ProtectedParameters=userId,postId,role 的隐藏字段。 .

当发出下一个请求时,重做整个过程。如果哈希值不同,则停止该过程。

安全方面,我按降序列出了选项。同时,它的便利性可能会越来越高。您必须为您的应用选择正确的组合。

关于ASP.NET MVC 2 EditModel 包含 Id?保护 ID 未被篡改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com