0

0

php怎么获取客户端ip_php如何安全准确获取用户真实IP地址

蓮花仙者

蓮花仙者

发布时间:2026-03-18 12:14:31

|

778人浏览过

|

来源于php中文网

原创

应通过可信代理传递的HTTP头(如X-Real-IP、CF-Connecting-IP)获取真实IP,严格校验代理来源和IP格式,避免直接信任REMOTE_ADDR或未验证的X-Forwarded-For。

php怎么获取客户端ip_php如何安全准确获取用户真实ip地址

$_SERVER['REMOTE_ADDR'] 只能拿到最外层代理的 IP

直接读 $_SERVER['REMOTE_ADDR'] 在绝大多数生产环境里是错的——你拿到的其实是 Nginx、CDN 或负载均衡器的出口 IP,不是用户真实出口。比如用 Cloudflare、阿里云 SLB、腾讯云 CLB 后,$_SERVER['REMOTE_ADDR'] 就是它们的机器地址,不是访客手机或电脑的出口 IP。

真正要靠的是代理链中传递的 HTTP 头字段,但这些头可以被客户端伪造,所以不能无条件信任。

实操建议:

Jamboss
Jamboss

Jamboss是一款简单的AI音乐生成App,可以一键生成歌曲。

下载
  • 只信任你可控的上游代理(如你自己的 Nginx)设置的头,比如 X-Real-IPX-Forwarded-For
  • Nginx 配置里必须显式加 proxy_set_header X-Real-IP $remote_addr;,否则 PHP 根本收不到真实源 IP
  • 如果用了多层代理(例如 CDN → Nginx → PHP),X-Forwarded-For 是逗号分隔的字符串,最右边才是原始客户端 IP,但前提是每一层都正确追加且未被污染

别直接用 $_SERVER['HTTP_X_FORWARDED_FOR'] 做判断

这个值来自请求头,用户只要 curl -H "X-Forwarded-For: 1.2.3.4" 就能伪造。直接用它做风控、限流、日志记录,等于把门钥匙交给攻击者。

立即学习PHP免费学习笔记(深入)”;

安全做法是:只在确认请求确实经过可信代理后,才从该头提取 IP,并且只取「可信跳数」之后的那个地址。

实操建议:

  • 先检查 $_SERVER['REMOTE_ADDR'] 是否属于你配置的可信代理网段(比如 Nginx 所在内网 IP 段)
  • 再解析 $_SERVER['HTTP_X_FORWARDED_FOR'],用 array_filter(array_map('trim', explode(',', $ipStr))) 拆出 IP 列表
  • 取倒数第 N 个 IP(N = 你控制的可信代理层数),例如只有一层 Nginx,则取最后一个;有 CDN + Nginx,则取倒数第二个
  • 对取出的 IP 调用 filter_var($ip, FILTER_VALIDATE_IP) 做基础校验,排除明显非法格式

PHP 7.3+ 可用 getallheaders() 但注意 SAPI 差异

getallheaders() 能读到所有请求头,在 Apache 下稳定可用,但在 CLI、FPM、Nginx+php-fpm 组合下可能返回空或报错,因为不是所有 SAPI 都实现该函数。

更兼容的写法是手动从 $_SERVER 提取,比如 $_SERVER['HTTP_X_REAL_IP']$_SERVER['HTTP_X_FORWARDED_FOR'](注意键名全大写、HTTP_ 前缀、连字符变下划线)。

实操建议:

  • 不要依赖 getallheaders(),改用 isset($_SERVER['HTTP_X_REAL_IP']) ? $_SERVER['HTTP_X_REAL_IP'] : null
  • 如果 Nginx 设置了 underscores_in_headers on;,记得关掉,否则含下划线的头(如 X_Real_IP)会被丢弃
  • 验证时别漏掉 IPv6 地址,filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) 要单独判

Cloudflare 等 CDN 场景必须用 CF-Connecting-IP

Cloudflare、StackPath 这类 CDN 不走标准 X-Forwarded-For,而是用自己签名的头,比如 CF-Connecting-IP。而且它只在你开启“真实 IP”插件并完成源站验证后才有效,否则仍是伪造的。

这个头无法被访客覆盖(Cloudflare 会清除客户端传来的同名头),比 X-Forwarded-For 可信得多。

实操建议:

  • 优先检查 $_SERVER['HTTP_CF_CONNECTING_IP'],存在且非空就直接用
  • 配合 Cloudflare 的 IP 段列表做白名单校验(官方定期更新:https://www.php.cn/link/2043d2a8fa2208b4c5f19bc6d5a94320),确认请求确实来自 Cloudflare
  • 如果你同时用了自建 Nginx 和 Cloudflare,Nginx 的 set_real_ip_from 必须包含 Cloudflare 的全部 IP 段,否则 REMOTE_ADDR 无法还原
实际部署时,IP 获取逻辑不是写死一条语句就能搞定的。可信代理列表、头字段优先级、IPv4/IPv6 兼容、CDN 类型识别——这些都要根据你的架构动态组合。最容易被忽略的是:没校验代理来源就盲信 X-Forwarded-For,或者忘了 Nginx 侧没配 real_ip_header 导致 PHP 层永远拿不到真实值。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

248

2023.07.27

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

522

2023.08.04

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

611

2023.08.04

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

245

2024.02.23

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

760

2024.07.09

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

3621

2024.08.07

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

60

2026.01.13

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

74

2026.01.13

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

3

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.4万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号