我很确定我记得读过 - 但是找不到链接了 - 关于这个:在一些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地址是否与创建会话时使用的相同。因此,在这种情况下,会话ID无法被盗以形成虚假会话。” < / p>
http://www.servletsuite.com/servlets/protectsessionsflt.htm
但是我很确定这本身就已经破了,因为有些ISP可能会看到来自不同IP的GET和POST。
答案 0 :(得分:5)
某些ISP(或大学网络)运行透明代理,这些代理会从网络负载最小的传出节点中继请求。
也可以在本地计算机上配置它以使用负载最低的NIC,这可能再次导致这种情况。
这是正确的,这是HTTP的有效状态,虽然它应该相对不频繁发生,但这就是为什么基于IP的用户验证不是一个适当的身份确定。
答案 1 :(得分:1)
对于要看到的Web服务器,这意味着最终用户在某种代理/网关之后。正如你所说,鉴于HTTP是无状态的,它是完全有效的,但我认为这是不寻常的。据我所知,大多数互联网服务提供商为家庭用户分配一个真实的非翻译IP(尽管通常是动态的)。
当然,对于企业/机构网络,他们可以做任何事情。负载均衡可能意味着请求来自不同的IP,有时可能会将请求类型转移到不同的网关(尽管我有兴趣知道为什么,因为N_GET&gt;&gt; N_POST)。