.net Cookies安全性實(shí)踐分析
更新時(shí)間:2009年04月27日 02:06:45 作者:
首先,你要相信網(wǎng)絡(luò)是不安全的,TCP協(xié)議也是不安全的。HTTP訪問是基于TCP協(xié)議來完成的,其能夠被攻擊是一定的。
跨站腳本攻擊一直是Web上常見的手段之一,攻擊一般是劫持用戶會(huì)話,拿到私有的鑰匙。如何劫持這個(gè)會(huì)話呢?
一、Sniffer(這里采用的軟件是Sniffer,java版的那個(gè))
Sniffer監(jiān)聽會(huì)話是不可護(hù)的,就和KOF里拉爾夫的宇宙幻影一樣,只要打中,一定是致命的。
上圖,就是一組偵聽數(shù)據(jù),當(dāng)然這里偵聽的是我本機(jī)的數(shù)據(jù)。實(shí)際上是可以偵聽局域網(wǎng),甚至廣域網(wǎng)上的數(shù)據(jù)。
得到一組16進(jìn)制的值??梢杂靡韵麓a獲得其值:
string bytestr = "";
string[] byteArray = bytestr.Split(' ');
byte[] b = new byte[byteArray.Length];
for (int i = 0; i < byteArray.Length; i++) {
b[i] = Convert.ToByte(byteArray[i], 16);
}
string msg = Encoding.UTF8.GetString(b);
Console.WriteLine(msg);
Console.Read();
bytestr 變量就放置16進(jìn)制字符串就行了。另外這里使用的編碼是utf-8,實(shí)際應(yīng)用中應(yīng)該與網(wǎng)站的編碼匹配。這個(gè)實(shí)驗(yàn)是拿博客園做實(shí)驗(yàn)的。博客園登錄狀態(tài)的cookie名為“.DottextCookie”。
在firefox中,退出博客園登錄,然后切換到firebug的控制臺(tái),使用命令行鍵入document.cookie='.DottextCookie=******;',然后刷新頁面,看到了什么?現(xiàn)在正處于登錄狀態(tài)!實(shí)際上在會(huì)話劫持中,一般都是拿登錄cookie的值,無論其是否加密,都可以劫持。
二、跨域腳本攻擊
要實(shí)現(xiàn)跨域腳本攻擊,除了利用瀏覽器漏洞,或者ARP欺騙,一般需要有兩個(gè)要素。首要的要素是,被攻擊的網(wǎng)站,需要能自定義html代碼(除了利用漏洞,一般是要支持script)。在客戶端使用document.cookie就可以拿到cookie的值,然后進(jìn)行分析,找出需要的鍵值對(duì)。就可以完成攻擊。這里關(guān)于如何跨域保存信息就不討論了。
比如有以下代碼:
HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");
Response.Cookies.Add(cookie);
實(shí)現(xiàn)了cookie的寫入。而在這個(gè)域下的頁面中,我有權(quán)限設(shè)置某個(gè)頁面中包含腳本的話,就可以實(shí)現(xiàn)攻擊。
<script>
document.write(document.cookie);
</script>
以上代碼是個(gè)簡(jiǎn)單的輸出,如果我把攔截到的document.cookie發(fā)送到我能保存數(shù)據(jù)的地方,那么就可以拿到很多有用的信息。這樣就完成了跨域腳本攻擊。
三、其它攻擊方法
其他攻擊方法只要能夠拿到這個(gè)cookie就可以了,不管你是用flash或者其它辦法。
四、可以防止的和不可防止的
剛才介紹到Sniffer方法是不可防止,那怎么防止腳本的攻擊呢?可以禁止用戶使用腳本,很多網(wǎng)站都這么做的,如果一定要使用的話,需要對(duì)cookie做特殊設(shè)置。在dotnet中,可以這樣處理:
HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
這樣,在客戶端就不可以訪問這個(gè)鍵值對(duì)的cookie,從而讓其他人即使能用腳本攔截會(huì)話,但是無法得到關(guān)鍵數(shù)據(jù)。
一、Sniffer(這里采用的軟件是Sniffer,java版的那個(gè))
Sniffer監(jiān)聽會(huì)話是不可護(hù)的,就和KOF里拉爾夫的宇宙幻影一樣,只要打中,一定是致命的。

上圖,就是一組偵聽數(shù)據(jù),當(dāng)然這里偵聽的是我本機(jī)的數(shù)據(jù)。實(shí)際上是可以偵聽局域網(wǎng),甚至廣域網(wǎng)上的數(shù)據(jù)。
得到一組16進(jìn)制的值??梢杂靡韵麓a獲得其值:
復(fù)制代碼 代碼如下:
string bytestr = "";
string[] byteArray = bytestr.Split(' ');
byte[] b = new byte[byteArray.Length];
for (int i = 0; i < byteArray.Length; i++) {
b[i] = Convert.ToByte(byteArray[i], 16);
}
string msg = Encoding.UTF8.GetString(b);
Console.WriteLine(msg);
Console.Read();
bytestr 變量就放置16進(jìn)制字符串就行了。另外這里使用的編碼是utf-8,實(shí)際應(yīng)用中應(yīng)該與網(wǎng)站的編碼匹配。這個(gè)實(shí)驗(yàn)是拿博客園做實(shí)驗(yàn)的。博客園登錄狀態(tài)的cookie名為“.DottextCookie”。
在firefox中,退出博客園登錄,然后切換到firebug的控制臺(tái),使用命令行鍵入document.cookie='.DottextCookie=******;',然后刷新頁面,看到了什么?現(xiàn)在正處于登錄狀態(tài)!實(shí)際上在會(huì)話劫持中,一般都是拿登錄cookie的值,無論其是否加密,都可以劫持。
二、跨域腳本攻擊
要實(shí)現(xiàn)跨域腳本攻擊,除了利用瀏覽器漏洞,或者ARP欺騙,一般需要有兩個(gè)要素。首要的要素是,被攻擊的網(wǎng)站,需要能自定義html代碼(除了利用漏洞,一般是要支持script)。在客戶端使用document.cookie就可以拿到cookie的值,然后進(jìn)行分析,找出需要的鍵值對(duì)。就可以完成攻擊。這里關(guān)于如何跨域保存信息就不討論了。
比如有以下代碼:
復(fù)制代碼 代碼如下:
HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");
Response.Cookies.Add(cookie);
實(shí)現(xiàn)了cookie的寫入。而在這個(gè)域下的頁面中,我有權(quán)限設(shè)置某個(gè)頁面中包含腳本的話,就可以實(shí)現(xiàn)攻擊。
復(fù)制代碼 代碼如下:
<script>
document.write(document.cookie);
</script>
以上代碼是個(gè)簡(jiǎn)單的輸出,如果我把攔截到的document.cookie發(fā)送到我能保存數(shù)據(jù)的地方,那么就可以拿到很多有用的信息。這樣就完成了跨域腳本攻擊。
三、其它攻擊方法
其他攻擊方法只要能夠拿到這個(gè)cookie就可以了,不管你是用flash或者其它辦法。
四、可以防止的和不可防止的
剛才介紹到Sniffer方法是不可防止,那怎么防止腳本的攻擊呢?可以禁止用戶使用腳本,很多網(wǎng)站都這么做的,如果一定要使用的話,需要對(duì)cookie做特殊設(shè)置。在dotnet中,可以這樣處理:
復(fù)制代碼 代碼如下:
HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
這樣,在客戶端就不可以訪問這個(gè)鍵值對(duì)的cookie,從而讓其他人即使能用腳本攔截會(huì)話,但是無法得到關(guān)鍵數(shù)據(jù)。
您可能感興趣的文章:
相關(guān)文章
ASP.NET MVC+EF在服務(wù)端分頁使用jqGrid以及jquery Datatables的注意事項(xiàng)
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC+EF在服務(wù)端分頁使用jqGrid以及jquery Datatables的注意事項(xiàng),感興趣的小伙伴們可以參考一下2016-06-06ASP.NET MVC圖片上傳前預(yù)覽簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET MVC圖片上傳前預(yù)覽簡(jiǎn)單實(shí)現(xiàn)代碼,可以獲取圖片文件名和圖片字節(jié)大小,感興趣的小伙伴們可以參考一下2016-05-05利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之后臺(tái)dataTable數(shù)據(jù)列表
jQuery dataTables 插件是一個(gè)優(yōu)秀的表格插件,應(yīng)用非常廣泛,本文給大家介紹利用ASP.NET MVC和Bootstrap快速搭建個(gè)人博客之后臺(tái)dataTable數(shù)據(jù)列表,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07ASP.NET?MVC使用Quartz.NET執(zhí)行定時(shí)任務(wù)
這篇文章介紹了ASP.NET?MVC使用Quartz.NET執(zhí)行定時(shí)任務(wù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09.Net整合Json實(shí)現(xiàn)REST服務(wù)客戶端的方法詳解
這篇文章主要給大家介紹了關(guān)于.Net整合Json實(shí)現(xiàn)REST服務(wù)客戶端的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01.NET MVC中ViewData,ViewBag和TempData的區(qū)別淺析
這篇文章主要介紹了.NET MVC中ViewData,ViewBag和TempData的區(qū)別,分析了ViewData,ViewBag和TempData在賦值、功能特性等方面的區(qū)別于用法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01