【问题标题】:Security when exposing user information暴露用户信息时的安全性
【发布时间】:2012-03-08 05:16:50
【问题描述】:

我目前正在使用 ASP .Net MVC3 构建电子商务网站。在结帐过程结束时,我有一个视图,其中显示了订单摘要,包括客户的联系方式(姓名、电子邮件、地址、联系号码等)。

我在查询字符串中使用了 GUID,用于从数据库中检索信息并将其显示在页面上(例如,www.site.com/Checkout/Complete?ID={GUID})。就安全性而言,这是否被认为是不好的做法?有人需要猜测 GUID 才能访问任何客户信息,这似乎几乎是不可能的。在显示信息之前,我是否应该额外努力对用户进行身份验证?

非常感谢

【问题讨论】:

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


    【解决方案1】:

    GUID 本身非常难以猜测或暴力破解。有 125 个可能的 GUID 的 2 次方(不是 2^128,因为有些位有 fixed meaning)。

    更大的担忧是

    • 许多浏览器会将浏览器历史记录(参见 hereherehere)暴露给不相关的页面。
    • 如果用户将结帐页面添加为书签,则可以从书签中检索到他的特殊 GUID。
    • Man-in-the-middle 攻击(尽管此时您可能正在使用 SSL,所以问题不大)。

    如果目的是允许某人链接回他们之前下的订单,为了方便起见,我会允许 GUID 预填充用户名,但仍需要密码。

    如果在浏览会话期间发生这种情况并且由于某种原因您需要 GUID(您不能将该信息存储在用户会话中吗?),我倾向于为此创建一个一次性 GUID,而不是暴露用户的唯一 ID。将一次性 GUID 映射到服务器代码中用户的实际唯一 ID(可以是真实 GUID 的加盐哈希,也可以映射到映射表中)。

    【讨论】:

      【解决方案2】:

      用户应该经过身份验证,您的代码应该检查当前登录的用户是否可以访问该信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 2016-09-15
        相关资源
        最近更新 更多