首页 后端开发 php教程 获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)_PHP

获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)_PHP

Jun 01, 2016 pm 12:07 PM
ip地址

分析过程
这个来自一些项目中,获取用户Ip,进行用户操作行为的记录,是常见并且经常使用的。 一般朋友,都会看到如下通用获取IP地址方法。

复制代码 代码如下:
function getIP() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$realip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$realip = $_SERVER['REMOTE_ADDR'];
}
return $realip;
}


这个是网上常见获取,ip函数,用这些值获取IP,我们首先要弄清楚,这些数据是从那个地方传过来的。

IP获取来源

1.'REMOTE_ADDR' 是远端IP,默认来自tcp 连接是,客户端的Ip。可以说,它最准确,确定是,只会得到直接连服务器客户端IP。如果对方通过代理服务器上网,就发现。获取到的是代理服务器IP了。

如:a->b(proxy)->c ,如果c 通过'REMOTE_ADDR' ,只能获取到b的IP,获取不到a的IP了。

另外:该IP想篡改将很难实现,在传递知道生成php server值,都是直接生成的。

2.'HTTP_X_FORWARDED_FOR','HTTP_CLIENT_IP' 为了能在大型网络中,获取到最原始用户IP,或者代理IP地址。对HTTp协议进行扩展。定义了实体头。

HTTP_X_FORWARDED_FOR = clientip,proxy1,proxy2 所有IP用”,”分割。 HTTP_CLIENT_IP 在高级匿名代理中,这个代表了代理服务器IP。既然是http协议扩展一个实体头,并且这个值对于传入端是信任的,信任传入方按照规则格式输入的。以下以x_forword_for例子加以说明,正常情况下,这个值变化过程。

image


分析Bug风险点:

通过刚刚分析我们发现,其实这些变量,来自http请求的:x-forword-for字段,以及client-ip字段。 正常代理服务器,当然会按rfc规范来传入这些值。但是,当一个用户直接构造该x-forword-for值,发送给用户用户,那将会怎么样呢?

image图(1)

第2步,修改x-forword-fox值,我们看看结果

image

 

第三步,我们再修改下看看会怎么样?

image

 

哈哈,看到上面结果没,x-forwarded-for不光可以自己设置值,而且可以设置任意格式值。 这样一来,好比就直接有一个可以写入任意值的字段。并且服务器直接读取,或者写入数据库,或者做显示。它将带来危险性,跟一般对入输入没有做任何过滤检测,之间操作数据源结果一样。 并且容易带来隐蔽性。

结论:

上面getip函数,除了客户端可以任意伪造IP,并且可以传入任意格式IP。 这样结果会带来2大问题,其一,如果你设置某个页面,做IP限制。 对方可以容易修改IP不断请求该页面。 其二,这类数据你如果直接使用,将带来SQL注册,跨站攻击等漏洞。至于其一,可以在业务上面做限制,最好不采用IP限制。 对于其二,这类可以带来巨大网络风险。我们必须加以纠正。

需要对getip 进行修改,得到安全的getip函数。

这类问题,其实很容易出现,以前我就利用这个骗取了大量伪装投票。有它的隐蔽性,其实只要我们搞清楚了,某些值来龙去脉的话。理解了它的原理,修复该类bug将是非常容易。

题外话,做技术,有三步,先要会做,会解决;后要思考为什么要这么做,原因原理是什么;最后是怎么样做,有没有其它方法。多问问自己,你发现距离技术真理越来越近。你做事会越来越得心应手的!

作者:chengmo QQ:8292669

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

小红书如何设置不显示ip地址?它怎么改id定位城市? 小红书如何设置不显示ip地址?它怎么改id定位城市? Mar 27, 2024 pm 03:00 PM

小红书作为一款流行的社交电商平台,用户可以在这里分享生活点滴、发现心仪商品。有些用户对个人隐私较为敏感,希望在小红书上不显示IP地址,以保护自己的网络隐私。那么,小红书如何设置不显示IP地址呢?本文将围绕这一问题进行详细解答。一、小红书如何设置不显示ip地址?1.修改小红书设置:打开小红书APP,点击右下角的“我”,进入个人中心。然后点击头像,进入账号设置。在账号设置中,找到“隐私设置”,点击进入。在这里,你可以找到关于IP地址的设置选项,将其关闭即可。2.清除缓存:有时候,小红书可能会显示错误

cmd怎么查看局域网所有ip cmd怎么查看局域网所有ip Feb 20, 2023 pm 02:22 PM

cmd查看局域网所有ip的方法:1、按“Win+R”快捷键打开“运行”窗口;2、在“运行”窗口中输入“CMD”后,按回车键;3、在打开的“命令提示符”界面中,输入命令“arp -a”并按回车键;4、从返回结果就可以看到本地局域网中的所有与本机通信的计算机IP地址。

windows10ip地址设置后无法保存怎么解决 windows10ip地址设置后无法保存怎么解决 Jul 08, 2023 pm 12:33 PM

有时大家会遇到必须手动修改ip地址的现象,但是有的windows10客户体现ip地址设置后无法保存,像这种情况要怎么解决呢?会有ip地址储存基本只因为你的ip地址填好存有错误,你可以检查一下是否把子网前缀给写出子网掩码了,如果是的话就改回来,改完之后就可正常储存ip地址了。windows10ip地址设置后无法保存怎么解决:错误图如下:填好错误了造成的提示“无法保存ip设置,请检查一个或多个设置并举试”,这里是子网前缀长短,并非子网掩码,如图所示。如上图,其实是很多用户把子网前缀给写出子网掩码了。

小米手机ip地址在哪里 小米手机ip地址在哪里 Feb 29, 2024 pm 06:10 PM

小米手机ip地址在哪里?在小米手机中是可以查询到ip地址,但是多数的用户不知道ip地址在哪里查询,接下来就是小编为用户带来的小米手机ip地址查看方法图文教程,感兴趣用户快来一起看看吧!小米手机ip地址在哪里1、首先打开小米手机中的设置功能,选择【我的设备】点击进入;2、然后在我的设备功能页,点击【全部参数】服务;3、接着在全部参数页面,滑动到底部选择【状态信息】;4、最后在状态信息界面即可看到ip地址。

闲鱼在哪修改ip地址_闲鱼ip地址修改方法分享 闲鱼在哪修改ip地址_闲鱼ip地址修改方法分享 Mar 20, 2024 pm 05:06 PM

闲鱼是一款很实用的二手交易平台,在这里我们可以购买很多不同的商品,也能出售自己的闲置物品,如果想修改自己的地址怎么操作呢?下面就来和小编一起看看吧!闲鱼ip地址修改方法分享首先打开闲鱼软件,进入首页后,在左上角可以看到海鲜市场、推荐、地址等选项,点击“地址”。2、然后在地址的页面中我们点击地址旁边的【向下箭头】;3、最后点击过后在选择城市的页面中我们点击城市即可;

抖音IP地址怎么变位置?IP地址变位置是什么原因? 抖音IP地址怎么变位置?IP地址变位置是什么原因? Mar 21, 2024 pm 06:30 PM

用户们通过抖音分享生活、展示才艺,与全国乃至全球的网友互动。有些用户出于隐私保护或地域限制等原因,希望改变自己在抖音上的IP地址。那么,抖音IP地址怎么变位置呢?一、抖音IP地址怎么变位置?代理服务器是一种用于将用户请求转发到互联网并返回响应的中介服务。通过配置代理服务器,用户可以隐藏其真实IP地址,实现IP地址的变更。这种方式有助于保护用户的隐私并提高网络安全性。代理服务器还可用于访问受限内容或绕过地理位置限制。总的来说,使用代理服务器是一种实用的网络工具,可以帮助用户更安全、更自由地浏览互联

ip地址是由多少位二进制数组成 ip地址是由多少位二进制数组成 Mar 01, 2023 pm 04:35 PM

ip地址是由32或128位二进制数组成。IP地址是IP协议提供的一种统一的地址格式,IP地址分两种:1、ipv4地址,由32位二进制数组成,用点分十进制表示,每八位划分,也就是四个0~255的十进制数;2、ipv6地址,由128位二进制数组成,用点分十六进制表示,每八位划分,也就是十六个0x00~0xff的十六进制数。

在因特网上的每一台主机都有唯一的地址标识称为什么 在因特网上的每一台主机都有唯一的地址标识称为什么 Aug 22, 2022 pm 03:24 PM

每一台主机都有唯一的地址标识称为“IP地址”。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个唯一的逻辑地址,以此来屏蔽物理地址的差异。由于有这种唯一的地址,才保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。

See all articles