使用阿里云函数计算获取访问者真实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;
?>