我使用注释来阻止未经授权的用户访问数据,但现在面临停止经过身份验证的用户编辑和删除彼此记录的问题。 如果这是由登录用户localhost / User / Edit / 43输入的 - 记录可能会被更改!即使您的记录不属于登录用户。
这是我用于此查询的内容,仅允许登录用户查看自己的记录。
var Adverts = from b in db.Adverts
.Where(c => c.Customer.Username == User.Identity.Name)
select b;
难以尝试为用户实施编辑和删除安全性。 任何建议都将受到欢迎
答案 0 :(得分:2)
您在上面所做的是正确的,但在实际应用更改之前,您还应该尝试使用此加载进行编辑和删除。这样您就可以检查是否没有返回记录并返回404(未找到而不是未授权),因为这些是数据加载规则。相同类型的逻辑适用于任何多租户应用程序,您只根据用户ID,公司ID等加载数据
您很快就会发现有多少表需要用户ID,公司ID等。
答案 1 :(得分:1)
首先,您可以更改用户导航到其记录的方式。目前,您允许他们通过URL(使用GET)访问彼此的记录。您可以通过仅允许他们通过POST(表单提交)进行访问来将其锁定一点。如果您的数据特别敏感,我强烈建议您进行此更改。
但是,无论哪种方式,如果数据是敏感的,那么您应该检查他们是否有权更改他们试图更改的内容。框架不提供此功能 - 您需要对其进行编码。我会在您显示页面之前检查谁拥有该记录,如果他们试图规避您的安全性,则发回401。但是,当他们尝试发布更改时,您可能会决定这样做,因为您可能会对他们看到它感到高兴。
我希望这会有所帮助。