确保编辑和删除记录

时间:2012-04-15 05:38:13

标签: asp.net-mvc-3 linq

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

您很快就会发现有多少表需要用户ID,公司ID等。

答案 1 :(得分:1)

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

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

我希望这会有所帮助。