亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Cookies欺騙分析與防護

2019-11-14 16:46:25
字體:
來源:轉載
供稿:網友

今天來談談cookies欺騙是怎么回事以及如何避免。

用戶在登錄之后通常會保存用戶信息,以便在其他需要權限的頁面去驗證用戶信息是否具有訪問權限。

有同學說我在登錄的時候已經很注意SQL注入問題了,還有什么不安全的地方么?

當然有!這個要首先談一個問題,那就是用戶身份驗證的流程 如下圖:

 

因此我們可以看出,一個頁面是否能夠被訪問,判斷依據是通過存儲信息區域中用戶的信息來判斷的

而登錄頁面的作用就是 驗證 用戶輸入的用戶名+密碼的組合是否在數據庫中存在,如果存在則把信息保存在存儲信息的區域,以便各個頁面去判斷權限

OK,理清這個思路之后我們的重點就來了,那個信息存儲區域對于我們來說至關重要,一般常見的有兩種形式,session和cookies

 

session和cookies同樣都是針對單獨用戶的變量(或者說是對象好像更合適點),不同的用戶在訪問網站的時候 都會擁有各自的session或者cookies,不同用戶之間互不干擾。

他們的不同點是:

1,存儲位置不同

session在服務器端產生,比較安全,但是如果session較多則會影響性能

cookies在客戶端產生,安全性稍弱

2,生命周期不同

session生命周期 在指定的時間(如20分鐘)到了之后會結束,不到指定的時間,也會隨著瀏覽器進程的結束而結束。

cookies默認情況下也隨著瀏覽器進程結束而結束,但如果手動指定時間,則不受瀏覽器進程結束的影響。 

 

由于如果用戶信息使用session保存的話,用戶信息往往會丟失而需要重新登錄,使用cookies的話則可以長時間有效比較利于用戶體驗,那session的情況我們不討論,下面說說使用cookies保存用戶信息的情況。

 

我們首先創建兩個頁面分別是Login.aspx和Main.aspx。Login.aspx用于獲取并保存用戶信息到cookies中,Main.aspx則用戶驗證用戶是否有權訪問本頁面,我們在本例中設定,登錄用戶有權訪問,匿名(未登錄)用戶,拒絕訪問。

首先來看Login.aspx 我們先創建兩個按鈕

“獲取登錄狀態”按鈕會 把信息保存到cookies中,這里僅保存UID,然后重定向到Main.aspx

“未獲取登錄狀態”按鈕 直接重定向到Main.aspx 進行匿名訪問

 

Login.aspx.cs 程序代碼:

 1     PRotected void Page_Load(object sender, EventArgs e) 2     { 3         //每次加載登錄頁面 清理UID 清除登錄狀態 4         Response.Cookies["uid"].Value = "0"; 5     } 6     protected void Button1_Click(object sender, EventArgs e) 7     { 8         //驗證步驟略過,假設用戶通過驗證并且得到如下信息: 9 10         int uid = 1; //用戶唯一ID11         string username = "admin"; //用戶名12         string userpwd = "123456"; //用戶密碼13 14         //接下來要保存用戶登錄狀態15         Response.Cookies["uid"].Value = uid.ToString();16 17         //跳轉到登錄后的頁面18         Response.Redirect("Main.aspx");19 20     }21     protected void Button2_Click(object sender, EventArgs e)22     {23         //未經驗證直接進入Main.aspx24         Response.Redirect("Main.aspx");25     }

 

在Main.aspx中進行驗證用戶是否已經登錄

 

 1     protected void Page_Load(object sender, EventArgs e) 2     { 3         CheckLogin(); 4     } 5  6  7     private void CheckLogin() 8     { 9         if (Request.Cookies["uid"] != null && GetUserInfo(int.Parse(Request.Cookies["uid"].Value), "") != "")10         {11             Response.Write(GetUserInfo(int.Parse(Request.Cookies["uid"].Value), "username") + "已登錄");12         }13         else14         {15             Response.Write("您尚未登陸,<a href='login.aspx'>點此登錄</a>");16         }17     }18 19 20     /// <summary>21     /// 模擬一個獲取用戶信息的方法22     /// 然而實際操作中需要通過ID查詢數據庫來獲取用戶信息23     /// 這里為了方便演示就直接return固定的值了24     /// </summary>25     /// <param name="uid"></param>26     /// <param name="key"></param>27     /// <returns></returns>28     private string GetUserInfo(int uid, string key)29     {30         if (uid == 1) //這里只設置uid為1的用戶,其他的UID的用戶不存在31         {32             switch (key)33             {34                 case "username": return "admin";35                 case "passWord": return "123456";36                 default: return "null";37             }38         }39         else40         {41             return "";42         }43     }

 

 OK,我們來測試一下,點擊獲取登錄狀態,實際上相當于用admin,123456這個組合來登錄。

好的,登錄成功,我們再來測試下匿名登錄,點擊未獲取登錄狀態

 

事情好像比我們想象的要順利,目前來說我們想要的效果已經都實現了,但是事實上真的是這樣嗎,顯然不是!

我們剛才說過,cookies是在客戶端產生,也就是我們自己的電腦上保存的

另一方面,Main.aspx這個頁面判斷 你是否能夠訪問的依據就是 cookies中的值是多少,如果是1,則認為你當前身份是UID為1的用戶,如果是5,則認為你當前身份是UID為5的用戶。

那么我們考慮一個事情,如果把我的cookies中的UID修改掉,比如改成35,是不是可以直接繞過登錄頁面,就可以以UID為35的用戶身份登錄呢?

事實上確實是這樣,這也就是標題中所說的cookies欺騙。由于cookies是客戶端產生我們可以很容易的修改,因此產生安全隱患。

下面就來實際測試一下,首先下載一款軟件 老兵cookies欺騙工具 界面如下圖:

 

在Address中輸入我們項目的訪問地址,然后連接

 

然后正常操作一遍,分別點擊 獲取登錄狀態  和  未獲取登錄狀態

   

發現我們正常操作是正常的判斷,下面重點來了,我們要修改cookies值 點擊未獲取登錄狀態 一樣可以被授權訪問

 

 

 

登錄成功了,那么我們應該如何避免這樣的問題呢?

正確的做法是,把密碼同時存入cookies(當然實際操作時候需要md5加密保存,這里為了方面演示使用明文保存),然后在Main.aspx驗證時候,同時驗證UID和密碼是否匹配即可。

我們來修改一下代碼:

Login頁面

 1 protected void Page_Load(object sender, EventArgs e) 2     { 3         //每次加載登錄頁面 清理UID 清除登錄狀態 4         Response.Cookies["uid"].Value = "0"; 5         Response.Cookies["pwd"].Value = ""; 6     } 7     protected void Button1_Click(object sender, EventArgs e) 8     { 9         //驗證步驟略過,假設用戶通過驗證并且得到如下信息:10 11         int uid = 1; //用戶唯一ID12         string username = "admin"; //用戶名13         string userpwd = "123456"; //用戶密碼14 15         //接下來要保存用戶登錄狀態16         Response.Cookies["uid"].Value = uid.ToString();17         Response.Cookies["pwd"].Value = userpwd;18         //跳轉到登錄后的頁面19         Response.Redirect("Main.aspx");20 21     }22     protected void Button2_Click(object sender, EventArgs e)23     {24         //未經驗證直接進入Main.aspx25         Response.Redirect("Main.aspx");26     }

 

Main頁面

 1 private void CheckLogin() 2     { 3         if (Request.Cookies["uid"] != null && Request.Cookies["pwd"] != null && GetUserInfo(int.Parse(Request.Cookies["uid"].Value), "") != "") 4         { 5             if (Request.Cookies["pwd"].Value == GetUserInfo(int.Parse(Request.Cookies["uid"].Value), "password")) 6             { 7                 Response.Write(GetUserInfo(int.Parse(Request.Cookies["uid"].Value), "username") + "已登錄"); 8             } 9             else10             {11                 Response.Write("您尚未登陸,<a href='login.aspx'>點此登錄</a>");12             }13         }14         else15         {16             Response.Write("您尚未登陸,<a href='login.aspx'>點此登錄</a>");17         }18     }

 

這樣改動之后,用戶如果再以修改cookies企圖繞過驗證的話,那么他除了修改UID之外,還必須修改pwd為正確的密碼。

有同學問:那如果他就是把PWD改成正確的密碼了呢?

這位同學...你的密碼都別別人竊取了...那么再安全的程序代碼也救不了你....

 

本文中案例源碼及相關工具下載:http://files.VEVb.com/webconfig/Cookies%E6%AC%BA%E9%AA%97.rar

 

感謝小伙伴們的熱烈討論,按照 @老牛吃肉 和其他同類觀點的用戶的建議,我嘗試做了另一方案,做下補充。

使用DES把UID加密放在cookies中,在驗證階段解密驗證。

http://www.49028c.com/webconfig/p/3624831.html

 

 

本文出自 低調碼農的筆記簿 http://www.49028c.com/webconfig/p/3623343.html 轉載請注明出處,如有謬誤不當之處,歡迎指正拍磚,不勝感謝?。?/p>

 

 


上一篇:[C#]遞歸遍歷文件夾

下一篇:C#綜合筆記

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品电影在线观看| 日韩精品极品视频免费观看| 国产成人精品久久二区二区| 在线亚洲男人天堂| 中文字幕久热精品视频在线| 国产精品日日摸夜夜添夜夜av| 少妇av一区二区三区| 亚洲欧美精品在线| 日韩日本欧美亚洲| 亚洲综合中文字幕在线| 精品国产999| 91高潮在线观看| 欧美成aaa人片免费看| 国产精品久久久久久久久免费看| 2019中文字幕免费视频| 91黄色8090| 欧美成年人视频网站| 日本最新高清不卡中文字幕| 午夜欧美不卡精品aaaaa| 青青草国产精品一区二区| 2019中文字幕在线| 国产成人精品在线视频| 91av在线网站| 欧美激情视频一区| 国产一区二区三区视频| 日本免费久久高清视频| 日韩国产精品一区| 91老司机在线| 欧美午夜精品久久久久久久| 美女视频黄免费的亚洲男人天堂| 神马国产精品影院av| 亚洲人成网站色ww在线| 日韩中文在线不卡| 亚洲国产精品久久久久秋霞不卡| 成人亚洲激情网| 欧美大尺度在线观看| xxxxx成人.com| 欧亚精品中文字幕| 亚洲成色999久久网站| 亚洲精品国精品久久99热| 国产精品jizz在线观看麻豆| 福利精品视频在线| 精品久久久久人成| 欧美日韩不卡合集视频| 538国产精品视频一区二区| 欧美精品在线看| 美女少妇精品视频| 97视频网站入口| 中文字幕日韩av| 欧美最顶级丰满的aⅴ艳星| 欧美激情乱人伦| 懂色av影视一区二区三区| 国产欧美一区二区三区久久人妖| 欧美性猛交xxxx久久久| 亚洲xxxxx性| 欧美综合在线观看| 亚洲天堂av高清| 亚洲夜晚福利在线观看| 亚洲欧美一区二区三区在线| 超碰91人人草人人干| 色噜噜狠狠色综合网图区| 久久久久久亚洲精品中文字幕| 日韩美女av在线免费观看| 成人夜晚看av| 久久综合久久美利坚合众国| 亚洲欧美国产一本综合首页| 成人黄色在线观看| 国产亚洲欧美aaaa| 欧美精品videofree1080p| 国产日韩精品一区二区| 国产欧美一区二区三区久久| 亚洲欧洲第一视频| 亚洲午夜性刺激影院| 亚洲美女黄色片| 中文字幕国产日韩| 国产自摸综合网| 国产一区二区三区直播精品电影| 国产综合香蕉五月婷在线| 欧美怡红院视频一区二区三区| 久久影院在线观看| 国产日韩精品电影| 亚洲精品乱码久久久久久金桔影视| 欧美成人网在线| 欧美国产精品va在线观看| 日本精品免费一区二区三区| 精品国内产的精品视频在线观看| 在线看片第一页欧美| 国产99视频在线观看| 久久夜色精品国产亚洲aⅴ| 成人免费网站在线看| 伊人久久大香线蕉av一区二区| 欧美精品久久久久久久久| 国产午夜精品全部视频播放| 亚洲精品成人网| 最新亚洲国产精品| 日韩精品欧美激情| 亚洲国模精品一区| 亚洲黄色www| 国产精品老牛影院在线观看| 欧美丰满少妇xxxxx做受| 成人免费福利视频| 日韩精品在线电影| 韩国日本不卡在线| 久久成年人免费电影| 国产一区红桃视频| 日韩欧美中文字幕在线观看| 成人中文字幕在线观看| 欧美国产激情18| 中文字幕v亚洲ⅴv天堂| 日韩电影中文字幕在线观看| 97国产真实伦对白精彩视频8| 国产偷亚洲偷欧美偷精品| 久久在精品线影院精品国产| 国产精品高清在线| 疯狂蹂躏欧美一区二区精品| 最近免费中文字幕视频2019| 欧美精品电影免费在线观看| 91精品啪在线观看麻豆免费| 久久久av亚洲男天堂| 51ⅴ精品国产91久久久久久| 午夜精品在线观看| 色爱精品视频一区| 欧美精品少妇videofree| 色综合久久精品亚洲国产| 欧美在线视频一区二区| 亚洲影视九九影院在线观看| 日韩美女毛茸茸| 欧美精品www在线观看| 91av在线播放视频| 日韩专区在线观看| 萌白酱国产一区二区| 97视频在线免费观看| 国产一区二区欧美日韩| 国产精品91在线| 日韩成人在线视频网站| 亚洲国内高清视频| 国产在线观看精品一区二区三区| 久久久久久久成人| 欧美激情中文字幕乱码免费| 国产精品久久久久久久久久三级| 欧美成人性生活| 久久免费视频在线观看| 九色91av视频| 欧美日韩中文字幕| 国产精品无av码在线观看| 亚洲第一国产精品| 色老头一区二区三区在线观看| 国产成人短视频| 亚洲www永久成人夜色| 亚洲国产成人精品久久久国产成人一区| 视频在线观看99| 中文字幕在线看视频国产欧美在线看完整| 欧美另类交人妖| 色99之美女主播在线视频| 国产精品日日摸夜夜添夜夜av| 91免费看国产| 国产成人精品在线视频| 性欧美在线看片a免费观看| 国产精品成人久久久久| 日韩欧美在线观看视频| 97精品在线观看| 欧美激情视频免费观看| 国产精品久久91| 成人国产亚洲精品a区天堂华泰|