gpt4 book ai didi

c# - ASP.NET MVC : Verify that editing record is allowed (ownership)

转载 作者:太空狗 更新时间:2023-10-30 01:12:03 26 4
gpt4 key购买 nike

我有一个多用户 ASP.NET MVC 应用程序。用户不应该看到彼此的数据或对彼此的数据进行任何操作。

我的 Controller 操作之一是强制性的 POST 到/Edit 以编辑记录(例如联系人)。现在这是我的问题:如果有人伪造一个简单的 POST 到/Edit(自动模型绑定(bind)到我的联系人类)并编辑其他人的信息怎么办?由于每条记录都由 Id 标识,因此所要做的就是使用 Id XXX 进行伪造的 POST,然后记录#XXX 将被攻击者提供的任何内容覆盖。我怎样才能阻止它?

我唯一想到的是首先从数据库中每次获取原始实例,检查它实际上在用户的可编辑对象范围内(他通常会看到的对象)编辑),并且仅当检查通过时才能继续 UpdateModel 并提交更新更改。

有没有更好的办法?

编辑:这不是跨站点/CSRF 攻击。另一个登录用户可以执行此操作。

最佳答案

View /页面的授权和特定对象的授权实际上是两个不同的概念。最好的方法是将 Authorize 属性与 ASP.NET 角色系统结合使用来授予或拒绝对给定页面的访问权限。一旦您验证了用户有权访问该页面,您就可以验证他是否拥有他所请求的对象的权限。我在我的应用程序中使用了这种方法,效果很好。通过首先使用 Authorize 筛选器,它显着提高了性能,因为实际的对象权限检查是一项繁重的操作。

另外,我使用自制的规则系统来实际设置和确定用户是否有权访问该对象。例如,在我的系统中,管理员可以完全访问每个对象。 (这是一条规则。)创建对象的用户拥有对该对象的完全访问权限(也由一条规则指定)。此外,用户的经理可以完全访问他的员工可以访问的所有内容(同样由规则指定。)然后我的应用程序评估对象以查看是否适用任何规则——首先从最不复杂的规则开始,然后移动最后介绍更复杂的规则。如果任何规则是肯定的,我将停止规则评估并退出函数。

关于c# - ASP.NET MVC : Verify that editing record is allowed (ownership),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1417248/

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