是否有可能伪造或劫持$_SERVER['REMOTE_ADDR']
变量的内容?
我想用以下内容伪造一个请求:
$_SERVER['REMOTE_ADDR']='127.0.0.1';
我怎么用PHP做到这一点呢?CURL能以某种方式做到这一点吗?
发布于 2011-02-23 23:03:06
远程地址不是出于礼貌而添加的地址,它是在IP协议中路由数据包的,所以如果您使用send a package with a fake address,您将不会收到响应,而且由于您正在谈论的是HTTP请求,它通过TCP连接传递,这需要几个IP数据包(以及匹配的响应)来设置:
不,这是不可能的(当然,除了通过环回接口从同一主机发送请求之外)。
发布于 2011-02-23 23:12:18
如果通过代理浏览,$_SERVER['REMOTE_ADDR']
可能会设置为代理的IP地址,而不是最终用户的IP地址。
在这种情况下,您还可以使用其他标头:此页面提供了一个函数,用于检查所有可能性,并提供最有可能是最终用户的地址:
http://roshanbh.com.np/2007/12/getting-real-ip-address-in-php.html
但是,如果用户使用配置错误的代理,或恶意代理,或旨在匿名最终用户的代理,则您将无法保证除REMOTE_ADDR
之外的任何标头(这只能将您引导至代理)。
如果您的最终用户通过HTTPS浏览,那么REMOTE_ADDR
将始终是他的IP地址;您不能使用通过HTTPS的代理转发。因此,绝对确定他的地址的一种方法是让他用HTTPS打开你的网站。
发布于 2011-02-23 23:05:51
这是由apache或您正在使用的任何服务器设置的变量。你不能欺骗它。您可以在脚本的开头运行$_SERVER['REMOTE_ADDR']='127.0.0.1';
,但我怀疑这不是您想要做的事情
https://stackoverflow.com/questions/5092563
复制相似问题