云服务器 99 / 年,新老同享(可以99/年续费),开发者力荐特惠渠道,新客户在享受9折
阿里云推广

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注