-2

如果 IP 地址可以通过创建虚假或操纵的 http 标头来欺骗,因此不应该依赖它来验证我们 PHP/ASP 页面中的传入请求,那么服务器为什么会接受并依赖它呢?例如,拒绝 IP 或允许 IP 都是基于 IP 的。

服务器是否通过其他方式(并且更可靠)而不是说 PHP/ASP 通过服务器变量获取 IP 信息?

4

2 回答 2

4

服务器通常愿意依赖连接的 IP 地址来处理低风险流量,因为建立 TCP 会话需要三次握手只有当数据包中的 IP 地址是可路由的并且某些机器准备好处理连接时,此握手才能成功。流氓路由器可以伪造 IP 地址,但一般来说,路由器离任一端点越远,伪造连接就越困难,因此大多数人都准备依赖它进行低风险用途。(例如,DNS 欺骗更有可能歪曲连接端点。)

高风险用户必须使用类似TLSIPsecCIPSO(很少见)的东西来验证连接端点,或者在较低层上构建用户身份验证来验证特定连接 ( OpenSSH )。

但是 TCP 会话的实际内容可以是任何东西——服务器不应依赖 TCP 会话的内容(例如 HTTP 标头)来忠实地报告 IP 地址或其他任何重要的东西。

于 2012-01-31T02:08:07.407 回答
2

IP 地址不能被欺骗。服务器需要该地址才能发送回复。

PHP 从服务器获取其 $_SERVER 全局的 IP 地址(因此是变量名!),它从协议栈的较低层确定地址。

编辑:

sarnold 提出了一个很好的观点,即原则上可能会破坏路由表以误导流量。(事实上​​,我相信几年前在亚洲的一级路由器中发生过这样的事件。)所以我应该澄清一下,我的评论“不能欺骗 IP 地址”是为了指出服务器变量将始终如实反映目的地IP。在服务器边界之外发生的事情完全是另一回事。

于 2012-01-31T02:05:08.230 回答