我们知道通过HTTP是可以添加串改IP的,那么PHP获取IP的时候,有可能就是假IP。那么workerman的TCP和websocket配合是否会被伪造IP呢?
还是说通过TCP连接,就压根不需要考虑会被伪造的可能?
TCP层面可以认为无法伪造IP。但有些通讯协议里可以携带ip数据,因为协议数据可以在应用层串改,所以如果应用使用协议层的ip有可能伪造。比如HTTP请求里HTTP头部可以传递自定义数据,比如x-real-ip: xx.xx.xx.xx,如果应用采用http头部的x-real-ip作为真实ip,那这个ip可能是伪造的。如果使用socket层面的接口获得的IP则不会伪造。也就是说在php-fpm里,$_SERVER['REMOTE_ADDR ']获得的ip不会被伪造,其它通过HTTP头获取ip比如 $_SERVER['HTTP_X_REAL_IP '] $_SERVER['HTTP_X_FORWARDED_FOR '] $_SERVER['HTTP_CLIENT_IP '] 等可能会被伪造。
x-real-ip: xx.xx.xx.xx
$_SERVER['REMOTE_ADDR ']
$_SERVER['HTTP_X_REAL_IP ']
$_SERVER['HTTP_X_FORWARDED_FOR ']
$_SERVER['HTTP_CLIENT_IP ']
在workerman中使用$connection->getRemoteIp();调用的是socket层面的接口,获得的ip不会伪造。
$connection->getRemoteIp();
TCP层面可以认为无法伪造IP。但有些通讯协议里可以携带ip数据,因为协议数据可以在应用层串改,所以如果应用使用协议层的ip有可能伪造。比如HTTP请求里HTTP头部可以传递自定义数据,比如
x-real-ip: xx.xx.xx.xx
,如果应用采用http头部的x-real-ip作为真实ip,那这个ip可能是伪造的。如果使用socket层面的接口获得的IP则不会伪造。也就是说在php-fpm里,$_SERVER['REMOTE_ADDR ']
获得的ip不会被伪造,其它通过HTTP头获取ip比如$_SERVER['HTTP_X_REAL_IP ']
$_SERVER['HTTP_X_FORWARDED_FOR ']
$_SERVER['HTTP_CLIENT_IP ']
等可能会被伪造。在workerman中使用
$connection->getRemoteIp();
调用的是socket层面的接口,获得的ip不会伪造。