【问题标题】:Can GET and POST requests from a same machine come from different IPs?来自同一台机器的 GET 和 POST 请求可以来自不同的 IP 吗?
【发布时间】:2010-05-29 14:22:55
【问题描述】:

我很确定我记得读过——但再也找不到链接了——关于这个:在某些 ISP(包括美国的至少一个大型 ISP)上,可能会有用户的 GET 和 POST 请求似乎来自不同的 IP。

(注意这完全是编程相关的,我会在下面给出一个例子)

不是谈论让您的 IP 地址在两个请求之间动态更改。

我说的是这个:

IP 1:  123.45.67.89
IP 2:  101.22.33.44

相同的用户发出 GET,然后是 POST,然后是 GET,然后是 POST,服务器会看到:

- GET  from IP 1
- POST from IP 2
- GET  from IP 1
- POST from IP 2

尽管是 同一个用户,但网络服务器会看到 GET 和 POST 的不同 IP。

肯定看到 HTTP 是一种无状态协议,这是完全合法的吧?

我想找回关于某些 ISP 如何/为何配置其网络以致发生这种情况的解释。

我之所以问,是因为有人要求我实现以下 IP 过滤器,我很确定它从根本上是损坏的代码(对至少一个主要的美国 ISP 用户造成破坏)。

这是一个 Java servlet 过滤器,它可以防止某些攻击。理由是:

对于任何会话过滤器,都会检查请求中的 IP 地址是否与创建会话时使用的 IP 地址相同。因此在这种情况下,会话 ID 不会被窃取以形成虚假会话。”

http://www.servletsuite.com/servlets/protectsessionsflt.htm

但是我很确定这本质上是有问题的,因为在某些 ISP 上,您可能会看到来自不同 IP 的 GET 和 POST。

【问题讨论】:

  • 有趣,我想知道这个。

标签: ip http-post http-get


【解决方案1】:

一些 ISP(或大学网络)运行透明代理,这些代理中继来自网络负载最小的传出节点的请求。

也可以在本地机器上配置它以使用负载最低的 NIC,这同样会导致这种情况。

您是正确的,这是 HTTP 的有效状态,虽然它应该相对不频繁地发生,但这就是为什么基于 IP 的用户验证不是身份的适当确定。

【讨论】:

    【解决方案2】:

    对于网络服务器来说,这意味着最终用户位于某种代理/网关后面。正如您所说,鉴于 HTTP 是无状态的,这是完全有效的,但我想这将是不寻常的。据我所知,大多数 ISP 都会为家庭用户分配一个真实的、非翻译的 IP(尽管通常是动态的)。

    当然,对于企业/机构网络,他们可以做任何事情。负载平衡可能意味着请求来自不同的 IP,并且有时请求类型可能会被分流到不同的网关(尽管我很想知道为什么,因为 N_GET >> N_POST)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 2012-03-04
      相关资源
      最近更新 更多