PHP菜鸟博客_共同学习分享PHP技术心得【PHP爱好者】
使用阿里云函数计算获取访问者真实ip的方法
2022-8-10 菜鸟站长


阿里云函数计算如何获取用户的真实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。



 

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容