XSS(跨站脚本攻击)攻击与防御
一、 XSS攻擊原理
XSS原稱為CSS(Cross-Site Scripting),因為和層疊樣式表(Cascading Style Sheets)重名,所以改稱為XSS(X一般有未知的含義,還有擴展的含義)。XSS攻擊涉及到三方:攻擊者,用戶,web server。用戶是通過瀏覽器來訪問web server上的網頁,XSS攻擊就是攻擊者通過各種辦法,在用戶訪問的網頁中插入自己的腳本,讓其在用戶訪問網頁時在其瀏覽器中進行執行。攻擊者通過插入的腳本的執行,來獲得用戶的信息,比如cookie,發送到攻擊者自己的網站(跨站了)。所以稱為跨站腳本攻擊。XSS可以分為反射型XSS和持久性XSS,還有DOM Based XSS。(一句話,XSS就是在用戶的瀏覽器中執行攻擊者自己定制的腳本。)
1.1 反射型XSS
反射性XSS,也就是非持久性XSS。用戶點擊攻擊鏈接,服務器解析后響應,在返回的響應內容中出現攻擊者的XSS代碼,被瀏覽器執行。一來一去,XSS攻擊腳本被web server反射回來給瀏覽器執行,所以稱為反射型XSS。
特點:
1> XSS攻擊代碼非持久性,也就是沒有保存在web server中,而是出現在URL地址中;
2> 非持久性,那么攻擊方式就不同了。一般是攻擊者通過郵件,聊天軟件等等方式發送攻擊URL,然后用戶點擊來達到攻擊的;
1.2 持久型XSS
區別就是XSS惡意代碼存儲在web server中,這樣,每一個訪問特定網頁的用戶,都會被攻擊。
特點:
1> XSS攻擊代碼存儲于web server上;
2> 攻擊者,一般是通過網站的留言、評論、博客、日志等等功能(所有能夠向web server輸入內容的地方),將攻擊代碼存儲到web server上的;
有時持久性XSS和反射型XSS是同時使用的,比如先通過對一個攻擊url進行編碼(來繞過xss filter),然后提交該web server(存儲在web server中), 然后用戶在瀏覽頁面時,如果點擊該url,就會觸發一個XSS攻擊。當然用戶點擊該url時,也可能會觸發一個CSRF(Cross site request forgery)攻擊。
1.3 DOM based XSS
基于DOM的XSS,也就是web server不參與,僅僅涉及到瀏覽器的XSS。比如根據用戶的輸入來動態構造一個DOM節點,如果沒有對用戶的輸入進行過濾,那么也就導致XSS攻擊的產生。過濾可以考慮采用esapi4js。
參見:http://www.freebuf.com/articles/web/29177.html , http://www.zhihu.com/question/26628342/answer/33504799
二、 XSS 存在的原因
XSS 存在的根本原因是,對URL中的參數,對用戶輸入提交給web server的內容,沒有進行充分的過濾。如果我們能夠在web程序中,對用戶提交的URL中的參數,和提交的所有內容,進行充分的過濾,將所有的不合法的參數和輸入內容過濾掉,那么就不會導致“在用戶的瀏覽器中執行攻擊者自己定制的腳本”。
但是,其實充分而完全的過濾,實際上是無法實現的。因為攻擊者有各種各樣的神奇的,你完全想象不到的方式來繞過服務器端的過濾,最典型的就是對URL和參數進行各種的編碼,比如escape, encodeURI, encodeURIComponent, 16進制,10進制,8進制,來繞過XSS過濾。那么我們如何來防御XSS呢?
三、 XSS 攻擊的防御
原則:寧死也不讓數據變成可執行的代碼,不信任任何用戶的數據,嚴格區分數據和代碼。
XSS防御的總體思路是:對輸入(和URL參數)進行過濾,對輸出進行編碼。
也就是對提交的所有內容進行過濾,對url中的參數進行過濾,過濾掉會導致腳本執行的相關內容;然后對動態輸出到頁面的內容進行html編碼,使腳本無法在瀏覽器中執行。雖然對輸入過濾可以被繞過,但是也還是會攔截很大一部分的XSS攻擊。
-
對輸入內容的特定字符進行編碼,例如表示 html標記的 < > 等符號。
-
對重要的 cookie設置 httpOnly, 防止客戶端通過document.cookie讀取 cookie,此 HTTP頭由服務端設置。
-
將不可信的值輸出 URL參數之前,進行 URLEncode操作,而對于從 URL參數中獲取值一定要進行格式檢測(比如你需要的時URL,就判讀是否滿足URL格式)。
-
不要使用 Eval來解析并運行不確定的數據或代碼,對于 JSON解析請使用 JSON.parse() 方法。
-
后端接口也應該要做到關鍵字符過濾的問題。
-
使用XSS Filter
總結
以上是生活随笔為你收集整理的XSS(跨站脚本攻击)攻击与防御的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速排序 (Quick Sort)(Ja
- 下一篇: bat