php怎么识别真实ip
PHP 里用来获取客户端 IP 的变量有这些:

$_SERVER['HTTP_CLIENT_IP'] 这个头是有的,但是很少,不一定服务器都实现了。客户端可以伪造。(推荐学习:PHP编程从入门到精通)
$_SERVER['HTTP_X_FORWARDED_FOR'] 是有标准定义,用来识别经过 HTTP 代理后的客户端 IP 地址,格式:clientip,proxy1,proxy2。详细解释见 http://zh.wikipedia.org/wiki/X-Forwarded-F...。 客户端可以伪造。
$_SERVER['REMOTE_ADDR'] 是可靠的, 它是最后一个跟你的服务器握手的 IP,可能是用户的代理服务器,也可能是自己的反向代理。客户端不能伪造。
客户端可以伪造的参数必须过滤和验证!很多人以为 $_SERVER 变量里的东西都是可信的,其实并不不然,$_SERVER['HTTP_CLIENT_IP'] 和 $_SERVER['HTTP_X_FORWARDED_FOR'] 都来自客户端请求的 header 里面。
如果要严格获取用户真实 ip
在反爬虫,防刷票的时候,客户端可以伪造的东西,我们一律不信任,此为严格获取。
没有套 CDN,用户直连我们的 PHP 服务器
这种情况下用 tcp 层握手的 ip,$_SERVER['REMOTE_ADDR']
自建集群用 nginx 实现负载均衡的时候
这种情况下,PHP 应用服务器不能对外暴露,我们在 nginx 中实现获取真实 IP 再换发给 PHP 服务器。
location /{ proxy_set_header client-real-ip $remote_addr;}
client-real-ip 可以随意自己命名,我们将 tcp 层中跟 nginx 握手的 ip 转发给 PHP。
使用 CDN,从 PHP 服务器取源的时候
CDN 会转发客户端的握手 ip 过来,各家策略有差异,具体去查 CDN 的文档。
当然我们也可以把需要严格核查的业务绑一个二级域名,单独走我们自己的 nginx 服务器,避开 CDN。
php怎么识别真实ip的更多相关文章
- 如何查找在CDN下的真实ip
今天去找了一下www.bilibili.tv的IP(为什么要这样子做见),发现www.bilibili.tv使用了CDN服务直接ping找不到其真实IP(实际上不用找也可以但就是想找一下). 那我们应 ...
- php获取用户真实IP和防刷机制
一. 如何获取用户IP地址 public static function getClientIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv( ...
- haproxy + nginx + proxy protocol 获得客户真实IP方法
公司网站架构为: 前面2台HA负载均衡,后面3台Nginx负载均衡反向代理,然后后面有N台WEB服务器 由于要统计IP,需要在WEB服务器日志里体现客户端真实IP 那么问题来了,通过HA代理的HTTP ...
- CloudFlare防护下的破绽:寻找真实IP的几条途径
本文仅代表作者独立观点,本文提及的技术仅供安全研究和渗透测试用途 看Twitter发现CloudFlare总裁什么的最近很高调,北京.香港的跑着参加会议.发表演说什么的,CloudFlare似乎也没那 ...
- 使用BurpSuite的Collaborator查找.Onion隐藏服务的真实IP地址
本文转载!!! 原文地址:http://www.4hou.com/technology/10367.html 翻译来自:http://digitalforensicstips.com/2017/11/ ...
- Java面试-如何获取客户端真实IP
在进行一些小游戏开发时,我们经常比较关注的一个功能便是分享.针对分享,我们希望能根据各个城市或者地区,能有不同的分享文案,辨识地区的功能如果由服务器来完成的话,我们就需要知道客户端的真实IP.今天我们 ...
- Kubernets中获取客户端真实IP总结
1. 导言 绝大多数业务场景都是需要知道客户端IP的 在k8s中运行的业务项目,如何获取到客户端真实IP? 本文总结了通行的2种方式 要答案的直接看方式一.方式二和总结 SEO 关键字 nginx i ...
- 绕过CDN获取服务器真实IP地址
相关视频链接:(https://blog.sechelper.com/20220914/penetration-testing-guide/cdn-bypass) CDN(Content Delive ...
- 如何获取用户的真实IP
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实 ...
随机推荐
- (转)解决mybatis的mapper.xml查询不出数据,结果一直为null问题
背景:记录mybatis使用过程中遇到的相关问题. 解决mybatis的mapper.xml查询不出数据,结果一直为null问题 解决方案: 1 修改实体类与数据库字段名相同 2 修改sql查询语句, ...
- Python【每日一问】31
问: [基础题]:有 n 个人围成一圈,顺序排号.从第一个人开始报数(从 1 到 3 报数) ,凡报到 3 的人退出圈子,问最后留下的是原来第几号的那位. (n由键盘输入,比如n=100) [提高题] ...
- ElasticSearch中的JVM性能调优
ElasticSearch中的JVM性能调优 前一段时间被人问了个问题:在使用ES的过程中有没有做过什么JVM调优措施? 在我搭建ES集群过程中,参照important-settings官方文档来的, ...
- laravel 5.5 仓库模式 文件之间接口与实现操作
仓库模式 最直接的意思就是: Eloquent数据(数据库)查询 方便快捷,简单明了.自己怎么写的,就怎么去调用,完全ok~ 本质意思: 仓库就像是业务内部的数据对象集合,负责协调业务和数据映射层之 ...
- C#读写修改设置调整UVC摄像头画面-缩放
有时,我们需要在C#代码中对摄像头的缩放进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
- Elasticsearch DSL 常用语法介绍
课程环境 CentOS 7.3 x64 JDK 版本:1.8(最低要求),主推:JDK 1.8.0_121 Elasticsearch 版本:5.2.0 相关软件包百度云下载地址(密码:0yzd):h ...
- 使用Nginx 对Laravel 进行负载
项目环境php7.2, nginx , Laravel,开发的微信公众号应用 .目前访问量的上升,单台服务器不能满足需求,于是用nginx做了负载.以下是一种可行性方案,目前正在使用. session ...
- 换个语言学一下 Golang(14) ——fmt包
Print() 函数将参数列表 a 中的各个参数转换为字符串并写入到标准输出中. 非字符串参数之间会添加空格,返回写入的字节数. func Print(a ...interface{}) (n int ...
- [Linux] TMUX Python版本设置
TMUX Python版本设置 本地mac的终端已经设置python版本为python3.7, 结果进入tmux时,一直时python2.7. # 本地.bash_profile alias pyth ...
- 谈谈游戏服务端SDK接入
“接sdk其实本质上就是一个对着接口文档写adaptor的工作,重复和无味.” 团队减员,身负多职,上一次调SDK已经可以回溯到游戏测试前夕了... 一般SDK只包含验证和支付功能,绝少部分SDK包含 ...