4

我很确定我记得读过——但再也找不到链接了——关于这个:在某些 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 上,您可能会看到 GET 和 POST 来自不同的 IP。

4

2 回答 2

5

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

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

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

于 2010-05-29T14:37:33.123 回答
1

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

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

于 2010-05-29T14:47:47.500 回答