热门标签 | 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



推荐阅读
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文介绍了如何使用Python的Paramiko库批量更新多台服务器的登录密码。通过示例代码展示了具体实现方法,确保了操作的高效性和安全性。Paramiko库提供了强大的SSH2协议支持,使得远程服务器管理变得更加便捷。此外,文章还详细说明了代码的各个部分,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
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社区 版权所有