热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP如何严格获取真实用户IP?

2019独角兽企业重金招聘Python工程师标准最近遇到个这个问题,短信被盗刷,然后查原因,发现一直被一个ip给不停的调用短信接口&

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近遇到个这个问题,短信被盗刷,然后查原因,发现一直被一个ip给不停的调用短信接口,无可奈何,谁让这个ip是我服务器的ip啊,后来想想也许是伪造的ip地址!那咱就获取真是ip做判断。 php来获取客户端ip的变量有这些:

》 $_SERVER['HTTP_CLIENT_IP'] // 这个头饰有的,但是很少,有些服务器实现不了。而且客户端可以伪造,我自己测试的时候就没有获取ip。
》 $_SERVER['HTTP_X_FORWARDED_FOR'] //用来识别经过HTTP代理后的客户端ip地址,格式:
clientip,proxy1,proxy2.客户端可以伪造。详情:http://zh.wikipedia.org/wiki/X-Forwarded-For。
》 $_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。

如果要宽松获取用户ip

这种情况比较简单,也是大部分开源程序使用的方式,因为他们要适应最广泛的部署环境, 依次获取和过滤,$_SERVER['HTTP_CLIENT_IP'],$_SERVER['HTTP_X_FORWARDED_FOR']的第一个ip,$_SERVER['REMOTE_ADDR'],谁先有值先用谁。注意这种方式,客户端可以提交假ip来欺骗服务器。

PHP如何验证和过滤客户端提交过来的ip。 博客链接:https://blog.haitun.me/get-real-client-ip/


转:https://my.oschina.net/gracebear/blog/893848



推荐阅读
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • ZABBIX 3.0 配置监控NGINX性能【OK】
    1.在agent端查看配置:nginx-V查看编辑时是否加入状态监控模块:--with-http_stub_status_module--with-http_gzip_stat ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了SpringCloudRibbon部分源码相关的知识,希望对你有一定的参考价值。1:ribbon是提供通过servi ... [详细]
author-avatar
自由战狼2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有