zoukankan      html  css  js  c++  java
  • PHP 获取客户端的真实IP

    static protected function getIP()
    {
      $ip;
      if (getenv("HTTP_CLIENT_IP"))
        $ip = getenv("HTTP_CLIENT_IP");
      else if(getenv("HTTP_X_FORWARDED_FOR"))
        $ip = getenv("HTTP_X_FORWARDED_FOR");//透过代理服务器取得客户端的真实 IP 地址
      else if(getenv("REMOTE_ADDR"))
        $ip = getenv("REMOTE_ADDR");//客户端使用的当前服务器地址(包括代理地址)
      else $ip = "Unknow";

      return $ip;
    }

    REMOTE_ADDR不可以显式的伪造,虽然可以通过代理将ip地址隐藏,但是这个地址仍然具有参考价值,因为它就是与你的服务器实际连接的ip地址。

    HTTP_CLIENT_IP、HTTP_X_FORWARDED_FOR都可以通过http header来伪造。项目中很多服务器隐藏在负载均衡后面,你通过REMOTE_ADDR只能获取到负载均衡节点的ip地址,一般的负载均衡节点会把前端实际的ip地址通过HTTP_CLIENT_IP或者HTTP_X_FORWARDED_FOR这两种http头传递过来

    这个值就是真实的,因为它是负载均衡节点告诉你的而不是客户端。但当你的服务器直接暴露在客户端前面的时候,请不要信任这两种读取方法,只需要读取REMOTE_ADDR就行了

    HTTP_CLIENT_IP:可通过http头伪造
    HTTP_X_FORWARDED_FOR:可通过http头伪造
    REMOTE_ADDR:可能是用户真实IP也可能是代理IP

  • 相关阅读:
    ThreadLocal
    volatile的理解
    二叉搜索树
    springboot中URL带有斜杠的转义字符%2F导致的400错误
    深入理解字符串
    Gradle安装与Idea配置
    基本数据类型和包装类
    Windows系统MongoDB安装
    Java程序是如何执行的?
    sshd服务器搭建管理和防止暴力破解
  • 原文地址:https://www.cnblogs.com/wangxuanvip/p/10566909.html
Copyright © 2011-2022 走看看