关于此的很多文章,特别是:SO问题:URL篡改
其中包含一些有趣的方法。
我正在寻找一种务实的方法,其中一些包含在上面的文章中。我承认我在我的应用程序开发的后期来了这个问题。我的URL大体上具有传统的controller / action / id格式,因此很容易被篡改(正如我现在意识到的那样),并且还用于其他用户记录。我的ID是整数,这可能是一个错误。GUID会更安全吗?
也可以选择使用当前用户ID更广泛地验证数据库查询,即仅返回数据归当前用户所有。另一方面,这意味着要修改很多查询。
我还在MVC3 / EF4.1 / SQL Server 2008中使用成员资格服务。
非常感谢您的任何建议。
您似乎在谈论应用程序中的资源和用户。因此,我假设您具有身份验证,用户应该在该身份上操纵属于他们的资源。您的问题是,通过替换id
url中的,当前用户可以操纵他不应该执行的其他用户的资源。
解决此问题的正确方法不是通过从URL隐藏ID,而是通过使用授权。因此,您可以编写一个风俗习惯AuthorizeAttribute
,该习俗将获取当前经过身份验证的用户和id
,然后在数据库中(或在存储此信息的任何位置)验证此ID属于他。然后,当他执行控制器操作时,您将已经知道当前用户已被授权执行他要求对此资源执行的任何操作。
您可以看看this post of mine
我在其中举例说明的方法。
因此,在处理此类情况时,请始终考虑以下事实:用户无法操纵的唯一伪像是他的身份验证票。因此,您获得的唯一保险是当前用户是谁。从这个事实开始,您应该基于自定义逻辑执行必要的授权。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句