国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

使用HTTP_X_FORWARDED_FOR獲取客戶端IP的嚴重后果

2024-07-21 02:02:17
字體:
來源:轉載
供稿:網友
在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("http://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.即是不要再理會代理情況.你的建議又是怎樣呢???
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 呼和浩特市| 平远县| 宝坻区| 梧州市| 光泽县| 咸阳市| 贺兰县| 德令哈市| 观塘区| 红河县| 大荔县| 深泽县| 原阳县| 曲阜市| 青浦区| 景宁| 鹤山市| 鹤岗市| 平塘县| 独山县| 手游| 邢台市| 大新县| 彭水| 娄底市| 民丰县| 石城县| 炉霍县| 南木林县| 都安| 广河县| 麻城市| 南华县| 上栗县| 灯塔市| 东乌珠穆沁旗| 阜南县| 巍山| 徐水县| 兴国县| 泰顺县|