-
分析过程
这个来自一些项目中,获取用户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例子加以说明,正常情况下,这个值变化过程。
分析Bug风险点:
通过刚刚分析我们发现,其实这些变量,来自http请求的:x-forword-for字段,以及client-ip字段。 正常代理服务器,当然会按rfc规范来传入这些值。但是,当一个用户直接构造该x-forword-for值,发送给用户用户,那将会怎么样呢?
第2步,修改x-forword-fox值,我们看看结果
第三步,我们再修改下看看会怎么样?
哈哈,看到上面结果没,x-forwarded-for不光可以自己设置值,而且可以设置任意格式值。 这样一来,好比就直接有一个可以写入任意值的字段。并且服务器直接读取,或者写入数据库,或者做显示。它将带来危险性,跟一般对入输入没有做任何过滤检测,之间操作数据源结果一样。 并且容易带来隐蔽性。
结论:
上面getip函数,除了客户端可以任意伪造IP,并且可以传入任意格式IP。 这样结果会带来2大问题,其一,如果你设置某个页面,做IP限制。 对方可以容易修改IP不断请求该页面。 其二,这类数据你如果直接使用,将带来SQL注册,跨站攻击等漏洞。至于其一,可以在业务上面做限制,最好不采用IP限制。 对于其二,这类可以带来巨大网络风险。我们必须加以纠正。
需要对getip 进行修改,得到安全的getip函数。
这类问题,其实很容易出现,以前我就利用这个骗取了大量伪装投票。有它的隐蔽性,其实只要我们搞清楚了,某些值来龙去脉的话。理解了它的原理,修复该类bug将是非常容易。
题外话,做技术,有三步,先要会做,会解决;后要思考为什么要这么做,原因原理是什么;最后是怎么样做,有没有其它方法。多问问自己,你发现距离技术真理越来越近。你做事会越来越得心应手的!
http://www.cnblogs.com/chengmo/archive/2013/05/29/php.html
- 浏览: 5043571 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
发表评论
-
ElasticSearch Groovy脚本远程代码执行漏洞分析(CVE-2015-1427) (附exp)
2017-10-16 19:08 1395ElasticSearch是一个JAVA开发的搜索分析引擎。 ... -
postman进行http接口测试
2017-09-26 17:21 994HTTP的接口测试工具有 ... -
selenium 使用经验总结
2017-08-20 16:21 682slenium 踩过很多坑总结一下1.版本问题浏览器和sele ... -
selenium chrome 浏览器闪退
2017-08-20 10:37 2785selenium 3.5.1 chrome 43 chrom ... -
selenium 浏览器版本
2017-08-19 22:19 856今天把手头有的一些关于selenium测试的资源整理了一下, ... -
geckodriver 关闭日志
2017-08-19 18:41 1895You can define the desired log ... -
selenium与firefox版本不兼容
2017-08-19 16:54 1724报错信息: org.openqa.selenium.fir ... -
解决Selenium与firefox浏览器版本不兼容问题
2017-08-19 16:41 1778因为在用Java打开firefox浏览器的时候报错 org ... -
剖析Elasticsearch集群系列之二:分布式的三个C、translog和Lucene段
2017-08-08 17:00 642转载:http://www.infoq.com/cn/art ... -
分布式搜索elasticsearch 搜索结果排序不一致性问题
2017-08-08 16:52 1398想象这一种情况,如果搜索结果中得分出现相同的情况下:由于搜索 ... -
多个ElasticSearch Cluster的一致性问题
2017-08-08 16:51 788本篇讨论同时使用多个ES Cluster进行搜索的时候,如何 ... -
WEB渗透测试之三大漏扫神器
2017-07-07 11:11 2455通过踩点和查点,已经能确定渗透的目标网站。接下来可以选择使用 ... -
淘宝 OAuth2.0 的登录验证与授权
2017-07-07 10:13 1734获取授权码Code应用在要求获取用户信息的时候,首先引导用户 ... -
Jsoup中getElementsByClass中className有空格处理
2017-06-17 16:31 2426今天在做网络爬虫的作业是,用jsoup解析html网页时要获 ... -
HttpClient4 Post XML到一个服务器上
2017-06-14 16:16 657HttpClient4 Post XML到一个服务器上 ... -
Android安装Fiddler证书抓取App的HTTPS流量
2017-06-14 15:45 2478情况是这样的:某Android App采用HTTPS协议和服 ... -
使用Charles进行https抓包
2017-06-07 16:16 1675Charles安装 抓HTTPS包 证书 ... -
如何使用charles对Android Https进行抓包
2017-06-07 14:38 1499原理 man-in-the-middle.png ... -
Selenium WebDriver 中鼠标事件
2017-05-28 10:57 793鼠标点击操作 鼠标点击事件有以下几种类型: 清单 1 ... -
获取真实IP的方法,以及伪造IP的例子代码
2017-05-04 18:06 1744内容提要:这种情况下同样透露了客户端是使用了代理服务器,但 ...
相关推荐
本篇文章主要探讨了通过`HTTP_X_FORWARDED_FOR`和`HTTP_CLIENT_IP`获取IP地址的通用方法及其潜在风险。 首先,`REMOTE_ADDR`是PHP中获取客户端IP的默认方法,它代表了直接连接到服务器的终端用户的IP地址。在没有...
通过上一篇,获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR) ,我们已经意 识到直接从http_x_forwarded_for中读取用户IP,跟我们直接从一个get,post值中读取其实没有两样。web参数检测里面一个基本原则...
一、没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没数值或不显示 二、使用透明代理服务器的情况:Transparent Proxies REMOTE_ADDR = 最后一个代理服务器 ...
总之,在ASP中获取用户IP地址,不仅要考虑到直接连接的情况,还要处理代理服务器的情况,通过`REMOTE_ADDR`和`HTTP_X_FORWARDED_FOR`结合使用可以提高获取IP的准确性。不过,这种方法依赖于代理服务器的正确配置,且...
综上所述,正确获取用户的真实IP地址需要同时考虑REMOTE_ADDR和HTTP_X_FORWARDED_FOR变量。开发者应当编写健壮的代码逻辑来应对各种复杂的网络访问情况,确保能够尽可能地获取到用户的实际IP地址。例如,对于多级...
标题《使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果》和描述《我的建议是不要再使用上面的方法去获取客户端IP.即是不要再理会代理情况.》所引出的知识点主要围绕着网络编程中获取客户端真实IP地址的问题及其潜在...
X-forwarded-For记录客户端的IP地址,而X-forwarded-By记录代理服务器的IP地址和端口号。 2.2 RFC原文 根据RFC 7239标准,X-forwarded-For和X-forwarded-By是两个opcion的HTTP头字段,用于记录客户端的IP地址和代理...
`HTTP_X_FORWARDED_FOR`是一个常见的代理服务器会设置的头,它包含了用户IP的链路,最前端的就是用户的原始IP。而`HTTP_CLIENT_IP`则表示客户端声明的IP地址。然而,这些头信息可以被轻易伪造,因此在依赖它们获取IP...
2. 然后检查`HTTP_X_FORWARDED_FOR`,处理其中可能存在的多个IP地址,并排除私有IP范围。 3. 如果以上步骤都无法获取IP,则使用`REMOTE_ADDR`。 #### 方法六:组合使用$_SERVER与getenv() **代码示例:** ```php ...
问题分析 熟悉nginx的都知道,nginx不...这里需要匹配$remote_addr $http_x_forwarded_for这两项其中一个获取是内部ip即可访问。 配置nginx $remote_addr不匹配 $flag为01,$http_x_forwarded_for也不匹配 $flag为011
此扩展允许您快速更新各种 X-Forwarded-For、X-Originating-IP、X-Remote-IP 和 X-Remote-Addr HTTP 标头 打开Chrome浏览器的扩展程序: 地址栏直接输入:chrome://extensions/ 把下载到的文件解压后,点击加载已...
综上所述,为了在ASP中准确获取客户端的真实IP地址,我们需要结合使用`HTTP_X_FORWARDED_FOR`和`REMOTE_ADDR`两种方法。这种处理方式既考虑了客户端通过代理服务器访问的情况,又兼顾了未通过代理服务器访问的情形,...
然而,由于代理服务器的存在,这个值可能不准确,所以代码接着检查`$_SERVER['HTTP_CLIENT_IP']`和`$_SERVER['HTTP_X_FORWARDED_FOR']`,这两个变量通常用于记录经过代理的IP地址。`validateIP`方法则使用PHP内置的`...
`HTTP_X_FORWARDED_FOR`是一个HTTP头部字段,它包含了经过代理或NAT服务器的客户端IP地址。 2. PHP中获取真实IP的方法: PHP同样可以通过检查`$_SERVER`全局数组中的`HTTP_X_FORWARDED_FOR`来获取真实IP。示例...
当`HTTP_X_FORWARDED_FOR`为空或包含“unknown”时,使用`REMOTE_ADDR`获取客户端IP地址: ```vb If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" OR InStr(Request.ServerVariables(...
你可以尝试使用`$_SERVER['HTTP_X_FORWARDED_FOR']`或`$_SERVER['HTTP_CLIENT_IP']`。但需要注意的是,这些头可以被轻易伪造,因此在安全场景下不能完全信赖。 2. **使用HTTPS和SSL**:在HTTPS环境下,由于数据是...
2. `$_SERVER['HTTP_X_FORWARDED_FOR']`:当用户通过代理服务器或者负载均衡器访问时,这个头字段可能会包含用户的原始IP地址。但要注意,这个值可以被轻易伪造,因此在安全性要求高的场景下需谨慎使用。 3. `$_...