文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于 ThinkPHP中get_client_ip函数安全性的问题

关于 ThinkPHP中get_client_ip函数安全性的问题

时间:2011-01-11  来源:xiaokaizi

2010年07月30日 星期五 上午 11:09

        这几天在研究客户端IP的问题,正好翻到Thinkphp的get_client_ip函数,该函数位于Thinkphp/Common/extend.php文件中,具体如下:

function get_client_ip(){
   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
       $ip = getenv("HTTP_CLIENT_IP");
   else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
       $ip = getenv("HTTP_X_FORWARDED_FOR");
   else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
       $ip = getenv("REMOTE_ADDR");
   else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
       $ip = $_SERVER['REMOTE_ADDR'];
   else
       $ip = "unknown";
   return($ip);
}

      学过基本编程的朋友都知道,该函数首先从HTTP包附带的参数进行IP地址判断,最后才对IP包的参数进行检测。而HTTP包通常都是可以自由改变的,比如使用curl工具。这样一来,这个函数就变得非常危险了,很容易使系统存在SQL注入。

      相对而言,REMOTE_ADDR的信息相对安全。因为一般而言,REMOTE_ADDR的值无法修改,设置它值的是服务器,如果不存在代理的情况下,获得的是用户的IP地址,如果存在代理的情况下,获得的是最后一个代理服务器的Ip地址。

      小结:

       1、get_client_ip函数不安全。笔者使用百度、谷歌等搜索引擎对国内相关获取客户端IP的函数进行检索,发现国内绝大多数开发人员均采纳类似的方法进行判断。

        2、没有绝对完美的获得客户端IP地址的方法,但本人建议还是直接从REMOTE_ADDR中获取较为安全,毕竟代理服务器不好找,即使能够找到也不会很多的

排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载