http://www.aygfsteel.com/ebecket 返還網
          隨筆-140  評論-11  文章-131  trackbacks-0

          .net Cookies安全性實踐

          首先,你要相信網絡是不安全的,TCP協議也是不安全的。HTTP訪問是基于TCP協議來完成的,其能夠被攻擊是一定的。

          跨站腳本攻擊一直是Web上常見的手段之一,攻擊一般是劫持用戶會話,拿到私有的鑰匙。如何劫持這個會話呢?

          一、Sniffer(這里采用的軟件是Sniffer,java版的那個

          Sniffer監聽會話是不可護的,就和KOF里拉爾夫的宇宙幻影一樣,只要打中,一定是致命的。

          上圖,就是一組偵聽數據,當然這里偵聽的是我本機的數據。實際上是可以偵聽局域網,甚至廣域網上的數據。

          得到一組16進制的值。可以用以下代碼獲得其值:

           


          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進制字符串就行了。另外這里使用的編碼是utf-8,實際應用中應該與網站的編碼匹配。這個實驗是拿博客園做實驗的。博客園登錄狀態的cookie名為“.DottextCookie”。

          在firefox中,退出博客園登錄,然后切換到firebug的控制臺,使用命令行鍵入document.cookie='.DottextCookie=******;',然后刷新頁面,看到了什么?現在正處于登錄狀態!

          實際上在會話劫持中,一般都是拿登錄cookie的值,無論其是否加密,都可以劫持。

          二、跨域腳本攻擊

          要實現跨域腳本攻擊,除了利用瀏覽器漏洞,或者ARP欺騙,一般需要有兩個要素。首要的要素是,被攻擊的網站,需要能自定義html代碼(除了利用漏洞,一般是要支持script)。在客戶端使用document.cookie就可以拿到cookie的值,然后進行分析,找出需要的鍵值對。就可以完成攻擊。這里關于如何跨域保存信息就不討論了。

          比如有以下代碼:

          HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");
          Response.Cookies.Add(cookie);

          實現了cookie的寫入。而在這個域下的頁面中,我有權限設置某個頁面中包含腳本的話,就可以實現攻擊。

           <script>
            document.write(document.cookie);
           </script>

          以上代碼是個簡單的輸出,如果我把攔截到的document.cookie發送到我能保存數據的地方,那么就可以拿到很多有用的信息。這樣就完成了跨域腳本攻擊。

          三、其它攻擊方法
          其他攻擊方法只要能夠拿到這個cookie就可以了,不管你是用flash或者其它辦法。

          四、可以防止的和不可防止的
          剛才介紹到Sniffer方法是不可防止,那怎么防止腳本的攻擊呢?可以禁止用戶使用腳本,很多網站都這么做的,如果一定要使用的話,需要對cookie做特殊設置。在dotnet中,可以這樣處理:

          HttpCookie cookie = new HttpCookie("mmmm", "vvvvvvvvvvvv");
          cookie.HttpOnly = true;
          Response.Cookies.Add(cookie);

          這樣,在客戶端就不可以訪問這個鍵值對的cookie,從而讓其他人即使能用腳本攔截會話,但是無法得到關鍵數據。

          posted on 2010-01-20 01:30 becket_zheng 閱讀(194) 評論(0)  編輯  收藏 所屬分類: 網頁web前端技術C#
          主站蜘蛛池模板: 砀山县| 佛山市| 湘乡市| 旺苍县| 南溪县| 玉龙| 灯塔市| 稻城县| 凯里市| 金阳县| 忻城县| 那坡县| 蒙自县| 永兴县| 湘乡市| 辽宁省| 都昌县| 南开区| 镇远县| 长兴县| 新源县| 双峰县| 墨江| 景德镇市| 丹凤县| 葫芦岛市| 安康市| 多伦县| 龙川县| 台东市| 离岛区| 溧阳市| 通山县| 渝中区| 秦安县| 体育| 教育| 青海省| 车致| 山阳县| 荣昌县|