使用阿里云函数计算获取访问者真实ip的方法
阿里云函数计算如何获取用户的真实ip?
在函数计算业务层代码我们打印如下两个值,我们发现设计到ip的几个值是$_SERVER里面的几个值如下:
print_r(getenv());
print_r($_SERVER);
echo $_SERVER['HTTP_CLIENT_IP'];
echo "<br/>";
echo $_SERVER['HTTP_X_FORWARDED_FOR'];
echo "<br/>";
echo $_SERVER['REMOTE_ADDR'];
我们通过本地访问下:
HTTP_X_FORWARDED_FOR:60.4.169.59 是我的客户端真实ip,REMOTE_ADDR:21.0.0.1 这个21.0.0.1,是fc后端实例获取的真实的客户端ip,说白了就是我的请求是经过这个代理过去的。我们需要的ip是HTTP_X_FORWARDED_FOR。
HTTP_X_FORWARDED_FOR能被伪造吗?
REMOTE_ADDR这个一般是无法被篡改的,但是HTTP_X_FORWARDED_FOR和HTTP_CLIENT_IP我们是可以通过程序发送curl请求伪造的,下面我们尝试通过程序伪造请求函数计算,看看函数计算获取到的ip是啥?
<?php
$ch = curl_init();
$url = "https://2.fuliv2.wziyi.net/index/testip";
$header = array( 'CLIENT-IP:192.168.1.1', 'X-FORWARDED-FOR:192.168.1.2');
//声明伪造head请求头
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
$page_content = curl_exec($ch);
curl_close($ch);
echo $page_content;
?>
REMOTE_ADDR是真实的ip,没有变化,因为不是我们需要的,这个就不说了。HTTP_CLIENT_IP就是我们篡改的数据,也说明了我们不能用这个参数做真实的ip。HTTP_X_FORWARDED_FOR这个参数逗号前面是模拟的篡改的数据,逗号后面是我发送请求的那台服务器的ip,也就是我们在函数计算获取这个参数的最后一个逗号后面的ip即可,就是客户真实的ip。
版权声明:若无特殊注明,本文皆为《菜鸟站长》原创,转载请保留文章出处。
本文链接:使用阿里云函数计算获取访问者真实ip的方法 - https://wlphp.com/?post=365