• 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

  • 相关阅读:
    制作Windows Server 2008安装启动U盘
    wireshark教程(一)
    TCPdump抓包命令详解
    ATM交换机 和普通交换机区别
    胖ap和瘦ap区别
    酒店网络非常常见故障一例
    JQuery EasyUI DataGrid动态合并(标题)单元) 一
    字典表左右选择
    treegrid-dnd.js
    MySQL开发规范
  • 原文地址:https://www.cnblogs.com/wangxuanvip/p/10566909.html
Copyright © 2020-2023  润新知