【问题标题】:MVC3 and URL TamperingMVC3 和 URL 篡改
【发布时间】:2014-03-22 16:01:21
【问题描述】:

关于这个的帖子很多,尤其是:SO Question:URL Tampering

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

我正在寻找一种务实的方法,其中一些包含在上述帖子中。我承认我在开发应用程序的过程中遇到了这个问题。我的 URL 大体上具有传统的控制器/操作/id 格式,因此很容易篡改,正如我现在意识到的那样,对于其他用户记录也是如此。我的 id 是整数,这可能是一个错误。 GUID 会更安全吗?

使用当前用户 ID 更广泛地验证数据库查询也是一种选择,即只有返回数据归当前用户所有。反过来,这意味着修改相当多的查询。

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

非常感谢您的任何建议。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 达林,非常感谢。所以你认为使用整数 ID 而不是 GUID 完全可以吗?以为我在这里犯了一个错误。听起来可能是一个愚蠢的问题,但整数 ID 几乎会邀请用户篡改,而 GUID 则完全不同。只是研究你的方法,我很感激你的智慧。
    • 使用整数完全没问题。你看过这个网站的网址吗?
    猜你喜欢
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 2013-11-12
    • 2015-01-28
    相关资源
    最近更新 更多