Web服务器变量$
我一般认为,在一个PHP脚本中,我可以测试$_SERVER['REMOTE_ADDR']
来建立发起请求的IP地址。 但是,我开始怀疑事情是不是更复杂一点。 这是场景
该请求将作为
file_get_contents('https://url?data=value')
在服务器A,B和C上,我非常天真地测试$_SERVER['REMOTE_ADDR']
来确定请求实际上来自服务器S。 令我惊讶的是,结果竟然是不完整和可变的
REMOTE_ADDR
中的值是与注册服务器S交互的人类用户的IP地址 REMOTE_ADDR
是注册服务器,S的IP地址-我所希望看到所有的时间 REMOTE_ADDR
中的值是来自主机服务器S所在虚拟服务器上IP地址池中的另一个IP地址 我并不需要执行这个额外的验证测试,因此我可以完全放弃它。 尽管如此,这个结果让我感到惊讶,所以我很好奇,看看这里的某个人是否能够点亮发生的事情。
我应该提到,我在服务器A,B和C上的Lighttpd上运行PHP 5.5 ,并在服务器S上的Apache 2上运行PHP 5.3 。
REMOTE_ADDR
是Apache(或任何其他Web容器)填充的变量,它包含通信另一端的终端IP地址。
它可靠吗? 是。
它安全吗? 取决于,如果您使用它,并认为它向您提供了拨打电话的用户的IP地址,那么您错了,任何代理站在路上都会破坏信息。
在你的情况下,发出HTTP调用的服务器应该提供它的IP地址,所以情况2应该始终发生。 我不知道什么时候出了什么问题,但它的奇怪。
为了响应Dany Caissy,不要依赖HTTP_X_FORWARDED_FOR
,它可以很容易地修改,因为它是一个HTTP头,而不是TCP / IP属性。
REMOTE_ADDR不是获得IP地址的唯一方式,还有:
HTTP_CLIENT_IP
HTTP_X_FORWARDED_FOR
HTTP_X_FORWARDED
HTTP_X_CLUSTER_CLIENT_IP
HTTP_FORWARDED_FOR
HTTP_FORWARDED
它们以不同的方式设置,可能意味着不同的事情,最终,获得您想要的IP地址非常困难。
编辑:他们中唯一可靠并且不能被用户修改的是REMOTE_ADDR,但它并不总是完全按照你想要的来做,所以你必须使用其他的,不管怎样'不安全“每个人都说他们是。
链接地址: http://www.djcxy.com/p/42269.html上一篇: Is the web server variable $
下一篇: how reliable is $