MVC3和URL篡改

时间:2014-03-22 16:01:21

标签: asp.net-mvc asp.net-mvc-3

关于这一点的帖子相当多,特别是:SO Question:URL Tampering

其中包含一些有趣的方法。

我正在寻找务实的方法,其中一些包含在上面的帖子中。我承认我在开发应用程序时遇到了这个问题。我的URL大体上都有传统的控制器/动作/ id格式,所以很容易篡改,正如我现在所知,还有其他用户记录。我的ids是整数,这可能是一个错误。 GUID会更安全吗?

使用当前用户ID更广泛地验证数据库查询也是一种选择,即只有当前用户拥有返回数据。翻转到这意味着修改了很多查询。

我也在使用MVC3 / EF4.1 / SQL Server 2008的会员服务。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:4)

您似乎在谈论应用程序中的资源和用户。因此,我认为您具有用户应该操纵属于它们的资源的身份验证。而你的问题是,通过替换url中的id,当前用户可以操纵他不应该做的另一个用户的资源。

解决这个问题的正确方法不是从网址中隐藏ID,而是使用授权。因此,您可以编写一个自定义AuthorizeAttribute,它将获取当前经过身份验证的用户和id,然后在数据库中(或存储此信息的任何位置)验证此ID属于他。然后,当他点击控制器操作时,您已经知道当前用户有权做他要求对此资源做的任何事情。

您可以查看this post of mine,其中我举例说明了该方法。

因此,在处理此类场景时,请始终考虑以下事实:用户无法操作的唯一工件是他的身份验证票证。因此,您获得的唯一保险是当前用户是谁。根据这一事实,您应该根据自定义逻辑执行必要的授权。