【发布时间】:2011-05-15 19:20:16
【问题描述】:
据我所知,网络服务器 (Apache/Nginx) 根据请求用户代理的声明位置提供 ($_SERVER['REMOTE_ADDR'])。所以我知道他们可能在撒谎,但这个值有可能是空白的吗?网络接口或网络服务器是否会接受没有正确格式 IP 的请求?
【问题讨论】:
-
您不能谎报您希望将数据发送回的位置... TCP 需要知道您的 IP 才能向您发送数据包,因此在他们甚至可以发送 HTTP 请求之前,TCP 连接必须已向 IP 发送 SYN/ACK 以创建连接...
-
您当然可以谎报您希望将数据发送回的位置。这就是某些形式的 DoS 攻击的问题。
-
@Xeoncross:带有源欺骗的 DoS 攻击不会像 Apache 那样深入 - 网络堆栈将在连接处于半开状态时卡住(因为无法可靠地生成 @ 987654323@ 没有
ACK) - 这甚至是许多 DoS 欺骗攻击的重点:在某些系统上,用于半开连接的表曾经是 tiny 的,一旦被填满,他们就停止接受。无论如何,即使您设法以某种方式打开带有欺骗源地址的 TCP 连接,您看到的只是一个不同的 REMOTE_ADDR,而不是一个空的。 -
@EJP: 不,
REMOTE_ADDR(和REMOTE_PORT)是由本地 Web 服务器根据连接的套接字的远程地址提供的,它不是来自 HTTP 标头。你可能在想$_SERVER['HTTP_X_FORWARDED_FOR']。 -
我看到
REMOTE_ADDR出现在"unknown"。
标签: php networking webserver