使用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"];
}
科学信息
孙大愚上⾯代码看来起是正常的.可惜这⾥却隐藏了⼀个隐患!!因为"HTTP_X_FORWARDED_FOR"这个值是通过获取HTTP头
的"X_FORWARDED_FOR"属性取得.所以这⾥就提供给恶意破坏者⼀个办法:可以伪造IP地址!!
下⾯是测试代码:
复制代码代码如下:
摇滚狂潮HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("localhost/ip.aspx");
request.Headers.Add("X_FORWARDED_FOR", "0.0.0.0");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
易信营销
StreamReader stream = new StreamReader(response.GetResponseStream());
string IP = stream.ReadToEnd();
stream.Close();
response.Close();
request = null;
"ip.aspx"⽂件代码:
复制代码代码如下:
Response.Clear();非理性信念
//优先取得代理IP
string IP = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(IP))
{
//没有代理IP则直接取客户端IP
IP = Request.ServerVariables["REMOTE_ADDR"];
}
Response.Write(IP);
Response.End();
这样.当测试代码中去访问ip.aspx⽂件时."string IP = stream.ReadToEnd();"这段代码取到的IP数据就是"0.0.0.0"(呵.在真实情况下.这样的IP地址肯定不是我们想要的结果.⽽在有些投票系统中限制⼀个IP只能投1次票时,如果也是⽤类似的代码取得对⽅IP然后再判断的话.呵呵.限制就失效咯)...
或者如果你⽤上⾯代码获取IP地址后后⾯⼜不再进⾏数据判断的话也许还能更进⼀步进⾏数据破坏!!
⽐如你⽤类似上⾯的代码中获取IP地址就直接有这样的SQL语句:
string sql = "INSERT INTO (IP) VALUE ('" + IP + "')";
那么也许破坏者还可以进⾏SQL注⼊进⾏数据破坏!!
这样看来利⽤"HTTP_X_FORWARDED_FOR"这个属性获取客户端IP的⽅法就不再可取了.-_-# 但如果不⽤这种⽅法.那么那些真正使⽤了代理服务器的⼈.我们⼜不能再获取到他们的真实IP地址(因为某些代理服务器会在"X_FORWARDED_FOR"这个HTTP头⾥加上访问⽤户真正的IP地址).呵.现实就是这样,某种东西都有有得必有失...
最后,我的建议是不要再使⽤上⾯的⽅法去获取客户端IP.即是不要再理会代理情况.你的建议⼜是怎样呢

本文发布于:2024-09-21 19:53:27,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/326972.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代码   IP地址   获取   代理   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议