1

我使用注释来阻止未经授权的用户访问数据,但现在面临阻止经过身份验证的用户编辑和删除彼此记录的问题。如果这是由登录用户 localhost/User/Edit/43 输入的 - 可以更改记录!即使您记录不属于已登录的用户。

这是我用于此查询的内容,仅允许登录用户查看他们自己的记录。

 var Adverts = from b in db.Adverts
                        .Where(c => c.Customer.Username == User.Identity.Name)
                                         select b;

难以为用户实施编辑和删除安全。任何建议都将受到欢迎

4

2 回答 2

2

您在上面所做的是正确的,但您还应该在实际应用更改之前尝试此加载以进行编辑和删除。通过这种方式,您可以检查是否没有返回记录并返回 404(未找到而不是未经授权),因为此时这些是数据加载规则。相同类型的逻辑适用于任何仅根据用户 ID、公司 ID 等加载数据的多租户应用程序

您会很快意识到有多少表需要用户 ID、公司 ID 等。

于 2012-04-15T15:11:40.380 回答
1

首先,您可以更改用户导航到他们的记录的方式。目前,您允许他们通过 URL(使用 GET)获取彼此的记录。您可以通过仅允许他们通过 POST(表单提交)访问来进一步锁定这一点。如果您的数据特别敏感,我强烈建议您进行此更改。

但是,无论哪种方式,如果数据是敏感的,您应该检查他们是否有权更改他们试图更改的内容。这不是由框架提供的——您需要对其进行编码。我会在您显示页面之前检查谁拥有该记录,如果他们试图规避您的安全性,则发回 401。但是当他们尝试发布更改时,您可能会决定这样做,因为您可能会很高兴他们看到它。

我希望这有帮助。

于 2012-04-15T06:39:11.570 回答