【问题标题】:One iPhone client, many IP addresses?一个 iPhone 客户端,多个 IP 地址?
【发布时间】:2010-08-17 20:43:00
【问题描述】:

我的 iPhone 应用通过 REST-ish API 访问服务器。我使用链接到客户端 IP 地址的会话来帮助防止会话劫持。但是我注意到来自某些客户端设备的服务器日志中有一些奇怪的请求序列。发生的情况是同一客户端从不同的 IP 地址请求我服务器上的不同 URL。典型的序列如下所示:

ipaddr1: POST /users/foo/login -- grants a session linked to ipaddr1
ipaddr2: GET /users/foo/resource -- 401 Not Authorized (IP address mismatch in session)
ipaddr1: POST /users/foo/login -- grants a session linked to ipaddr1
ipaddr2: GET /users/foo/resource -- 401 Not Authorized (IP address mismatch in session)
ipaddr1: POST /users/foo/login -- grants a session linked to ipaddr1
ipaddr2: GET /users/foo/resource -- 401 Not Authorized (IP address mismatch in session)
...

等等,这些请求相隔大约 3 秒。有时甚至可以同时使用多达 4 个 IP 地址!

在客户端,我只是使用普通的NSURLConnection 来请求每个资源,所以我不认为这是我在代码中所做的任何事情。

以前有人见过这样的事情吗?会不会是某种奇怪的代理?

【问题讨论】:

    标签: iphone networking ios


    【解决方案1】:

    我的印象是大多数网络都使用简单的 NAT;代理已经过时了,因为大多数数据都不能再缓存了(我们大学正在关闭它的代理;最后我检查了他们关闭了缓存,因为大多数带宽都用于 YouTube 之类的东西)。

    另一方面,几年前,移动网络使用“转码”代理仍然相当普遍(请参阅“缓存控制:无转换”)。这只是为了增加带有垃圾浏览器的设备上的移动互联网使用率,否则这些浏览器无法呈现“流行”网站。不久前,我在各种运营商上测试了 HTTPS,发现其中一个 HTTP CONNECT 设置了某种 NAT(大概是为了减少代理开销),但是这样做的方式很糟糕,以至于连接没有建立。禁用代理使一切正常。

    也许它是一个代理,它使用一个框用于 GET 和另一个用于 POST?或者它对请求/连接端点/等进行哈希处理以找出从哪个 IP 发送它?

    如果您想了解发生了什么,请尝试联系相关用户,或通过whois 查找相关 IP。


    一般来说,将会话绑定到 IP 是不可取的。我知道有几个网站可以(Atlassian Crowd“SSO”令牌应该绑定到 IP 地址);更好的让它成为一种选择(想到Livejournal)。最好的只是使用 HTTPS。

    HTTPS 还可以阻止攻击者窃取用户的密码(用户会重复使用密码,因此即使您的网站不是安全关键,您也不应该传输未加密的密码。

    我会完全切换到 HTTPS;这并不难,而且 SSL 证书也不贵(StartCom 的免费“StartSSL”证书可能足以满足您的目的)。

    如果 HTTPS 工作量太大,假设您使用的是自定义会话管理代码,那么在登录时返回随机 MAC 密钥并使用该密钥(以及防止重播的序列号)签署未来的请求并不难.仍然存在实时窃听和 MITM 攻击。

    如果您使用 HTTPS 登录而不是其他请求,那么问题可能是 HTTP 被代理但 HTTPS 没有(因为代理根本不利于 HTTPS)。

    【讨论】:

    • 确实,登录是通过 HTTPS 进行的,而其他请求是通过 HTTP 进行的。作为问题的原因,您的最后一段听起来很合理。我也许可以完全切换到 HTTPS,但我的服务只是一个休闲游戏,并且密码已经非常安全地处理了 AFAIK。 (需要包括标点符号,从不以明文形式发送,存储为加盐哈希。)即使将 IP 地址链接到会话,也更像是一种“确定,为什么不”的防御,而不是对任何真正预期的威胁的响应。我可能会禁用会话验证的这方面。感谢您的回复。
    • HTTPS 几乎没有成本——如果您已经在使用 HTTPS 进行会话启动,那么就有一个连接等待重用。在欧盟,如果您担心遵守各种“数据保护”法律(例如,如果您要求提供某人的“真实姓名”),这也是一个好主意。
    【解决方案2】:

    您不能期望请求来自同一个 IP 地址。 iPhone 可以循环通过多个 WiFi 网络、3G、EDGE 和 GPRS 发送请求。如果会话劫持是一个问题,请使用 SSL。

    话虽如此,您看到的行为并不典型;如果 WiFi 网络出现故障,iPhone 应该只将 WiFi 关闭到 3G(对于 3G 与 EDGE 和 EDGE 与 GPRS 也是如此)

    【讨论】:

    • 感谢您的回复。我不希望请求来自同一个 IP 地址,并且该应用程序确实可以优雅地处理简单的 IP 地址更改。它无法处理的是多个同时存在的 IP 地址。
    猜你喜欢
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 2019-01-14
    • 2011-10-22
    相关资源
    最近更新 更多