【问题标题】:Protect api from replay attacks保护 api 免受重放攻击
【发布时间】:2011-01-21 12:01:35
【问题描述】:

我正在开发一个 api。该 api 将由 iphone 应用程序使用。

该 api 需要登录。我们使用 asp.net 表单身份验证来保护它。客户端获取一个 cookie 来重新发送即将到来的请求。

我们正在使用 https,但我猜该请求仍然可以重放。我该如何保护 cookie 只能由首次登录的客户端使用?

我正在考虑在每次请求时更新 cookie。但是应用程序有时会异步发送多个请求。所以那行不通。

/帕特里克

【问题讨论】:

    标签: iphone security api


    【解决方案1】:

    您可能不在乎 任何 动作是否可以重播,例如可能获取一些非重要信息的异步​​请求。

    您仍然可以要求该应用在每个具有财务或安全后果的重要操作之前重新登录。

    我希望您永远不要通过网络交换身份验证秘密(密码)。相反,您向应用程序发送一个质询字符串,应用程序使用密码对其进行编码并发送回。服务器做同样的事情并比较结果。这个操作很容易在任何重要动作之前重复,甚至作为重要动作的一部分:回复是由秘密编码的。除非窃听者知道这个秘密,否则他很不走运重播一个动作,因为服务器发送的挑战会有所不同。

    不,我不知道这个方案是否适合 asp.net 身份验证机制。

    【讨论】:

      【解决方案2】:

      您可以尝试让客户端为每笔交易发送加密或哈希保护的序列号和时间戳,并在服务器端检查重复项。

      【讨论】:

      • 时间戳仅在两端具有同步时钟的情况下才有效,即便如此,您仍然必须留下一个“松弛窗口”来解决差异。
      【解决方案3】:

      除了为您的应用程序使用 SSL 连接以确保没有人从一开始就窃取 cookie 之外,没有万无一失的方法可以防止利用窃取的身份验证 cookie 进行重放攻击。

      您最好的选择是将 cookie 的过期时间设置为相当低的值,并要求用户在该超时后重新输入他们的凭据。理想情况下,这将是一个滑动窗口,但如果您不介意真正勾选您的用户,则可以将其设为绝对窗口。

      【讨论】:

        猜你喜欢
        • 2015-12-08
        • 1970-01-01
        • 1970-01-01
        • 2010-11-04
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-31
        相关资源
        最近更新 更多