使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果

问题描述

在WEB开发中.我们可能都习惯使用下面的代码来获取客户端的IP地址:-----------------C#代码----------------------------------------------------------------------//优先取得代理IPstringIP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"];if(string.IsNullOrEmpty(IP)){//没有代理IP则直接取连接客户端IPIP=Request.ServerVariables["REMOTE_ADDR"];}-----------------------------------------------------------------------------------------------上面代码看来起是正常的.可惜这里却隐藏了一个隐患!!因为"HTTP_X_FORWARDED_FOR"这个值是通过获取HTTP头的"X_FORWARDED_FOR"属性取得.所以这里就提供给恶意破坏者一个办法:可以伪造IP地址!!下面是测试代码:--------------C#代码---------------------------------------------------------------------------HttpWebRequestrequest=(HttpWebRequest)HttpWebRequest.Create("http://localhost/ip.aspx");request.Headers.Add("X_FORWARDED_FOR","0.0.0.0");HttpWebResponseresponse=(HttpWebResponse)request.GetResponse();StreamReaderstream=newStreamReader(response.GetResponseStream());stringIP=stream.ReadToEnd();stream.Close();response.Close();request=null;-----------------------------------------------------------------------------------------------"ip.aspx"文件代码:------------C#代码-----------------------------------------------------------------------------Response.Clear();//优先取得代理IPstringIP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"];if(string.IsNullOrEmpty(IP)){//没有代理IP则直接取客户端IPIP=Request.ServerVariables["REMOTE_ADDR"];}Response.Write(IP);Response.End();------------------------------------------------------------------------------------------------这样.当测试代码中去访问ip.aspx文件时."stringIP=stream.ReadToEnd();"这段代码取到的IP数据就是"0.0.0.0"!!!!(呵.在真实情况下.这样的IP地址肯定不是我们想要的结果.而在有些投票系统中限制一个IP只能投1次票时,如果也是用类似的代码取得对方IP然后再判断的话.呵呵.限制就失效咯)...或者如果你用上面代码获取IP地址后后面又不再进行数据判断的话也许还能更进一步进行数据破坏!!比如你用类似上面的代码中获取IP地址就直接有这样的SQL语句:stringsql="INSERTINTO(IP)VALUE('"+IP+"')";那么也许破坏者还可以进行SQL注入进行数据破坏!!原文地址:

解决方案

解决方案二:
该回复于2008-05-20 18:29:21被版主删除
解决方案三:
又来做广告了不知道能不能接到分?boolIsIPAddress(str1)判断是否是IP格式/**////<summary>///判断是否是IP地址格式0.0.0.0///</summary>///<paramname="str1">待判断的IP地址</param>///<returns>trueorfalse</returns>publicstaticboolIsIPAddress(stringstr1){if(str1==null||str1==string.Empty||str1.Length<7||str1.Length>15)returnfalse;stringregformat=@"^d{1,3}[.]d{1,3}[.]d{1,3}[.]d{1,3}$";Regexregex=newRegex(regformat,RegexOptions.IgnoreCase);returnregex.IsMatch(str1);}

时间: 2024-07-30 17:23:41

使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果的相关文章

使用HTTP_X_FORWARDED_FOR获取客户端IP的严重后果_相关技巧

在WEB开发中.我们可能都习惯使用下面的代码来获取客户端的IP地址: C#代码 复制代码 代码如下: //优先取得代理IP string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(IP)) { //没有代理IP则直接取连接客户端IP IP = Request.ServerVariables["REMOTE_ADDR"]; } 上面代码看来起是正常的.可

php如何获取客户端IP地址

php获取客户端IP地址的几种方法 阅读php获取客户端IP地址的几种方法, <?php $iipp=$_SERVER["REMOTE_ADDR"]; echo $iipp; ?> <?php $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($

php如何获取客户端ip

  php获取客户端ip,简单实用 function getOnlineIP() { $cip = getenv ( 'HTTP_CLIENT_IP' ); $xip = getenv ( 'HTTP_X_FORWARDED_FOR' ); $rip = getenv ( 'REMOTE_ADDR' ); $srip = $_SERVER ['REMOTE_ADDR']; if ($cip && strcasecmp ( $cip, 'unknown' )) { $onlineip = $

PHP实现获取客户端IP并获取IP信息_php技巧

代码很简洁,功能很实用,这里就不多废话了,直接奉上: 复制代码 代码如下: <?php /**  * 获取客户端IP  * @param  integer $type 返回类型 0:string,1:long  * @return string|long  */ function getClientIp($type = 0) {     $ip = NULL;     if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {         $arr = ex

ip网址怎么获取客户端ip地址

问题描述 比如地址是:1.51.23.111/index.aspx没有域名怎么获取客户端ip地址///<summary>///获取远程访问用户的Ip地址///</summary>///<returns>返回Ip地址</returns>protectedstringGetIps(){stringloginip="";//Request.ServerVariables[""]--获取服务变量集合if(Request.Ser

如何获取客户端IP、WEB服务器IP

  获取客户端IP private string GetClientIP() { string result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (null == result || result == String.Empty) { result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR&

jsp获取客户端IP地址的方法_JSP编程

本文实例讲述了jsp获取客户端IP地址的方法.分享给大家供大家参考,具体如下: public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Forwarded-For"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request

获取客户端IP的方法代码

// //获取客户端IP // function GetIP() { if(!empty($_SERVER["HTTP_CLIENT_IP"])) $cip = $_SERVER["HTTP_CLIENT_IP"]; else if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) $cip = $_SERVER["HTTP_X_FORWARDED_FOR"]; else if(!empty(

深入分析几种PHP获取客户端IP的情况转

转 http://developer.51cto.com/art/200912/166495.htm   function getip() { $unknown = 'unknown'; if (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'] && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown) ) { $ip