XSS跨站攻擊
目錄1 XSS跨站攻擊簡介 1
1.1 什麼是XSS 1
1.2 XSS的分類 1
1.3 XSS的危害 1
2 XSS的攻擊原理 1
2.1 本地式漏洞攻擊 1
2.2 存儲式漏洞攻擊 2
2.3 反射式漏洞攻擊 2
3 XSS的防禦策略 3
3.1 過濾特殊字符或敏感字段 3
3.2 對敏感數據進行加密 4
1 XSS跨站攻擊簡介
1.1 什麼是XSS
XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁麵裏插入惡意腳本代碼,當用戶瀏覽該頁之時,嵌入其中Web裏麵的腳本代碼會被執行,從而達到惡意攻擊用戶的特殊目的。XSS屬於被動式的攻擊,因為其被動且不好利用,所以許多人常忽略其危害性。
1.2 XSS的分類
一類是來自內部的攻擊,主要指的是利用網頁自身的漏洞,將惡意腳本注入到網頁,當用戶訪問此頁麵時,惡意腳本也會跟著執行,這樣惡意腳本就能利用到用戶的所有狀態數據執行惡意操作,比如發微博、私信等(新浪微博的XSS攻擊就是此類)。
另一類則是來自外部的攻擊,主要指的自己構造XSS跨站漏洞網頁或者尋找非目標機以外的有跨站漏洞的網頁。如當我們要滲透一個站點,我們自己構造一個有跨站漏洞的網頁,然後構造跨站語句,攻擊網站漏洞。
1.3 XSS的危害
• 盜取各類用戶帳號,如機器登錄帳號、用戶網銀帳號、各類管理員帳號
• 控製企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
• 盜取企業重要的具有商業價值的資料
• 非法轉賬電子郵件
• 強製發送網站掛馬
• 控製受害者機器向其它網站發起攻擊
2 XSS的攻擊原理
XSS攻擊原理是利用web應用的漏洞進行攻擊的。這些漏洞攻擊可歸類為三種:本地式漏洞攻擊,存儲式漏洞攻擊,反射式漏洞攻擊。
2.1 本地式漏洞攻擊
這種漏洞存在於頁麵中客戶端腳本自身。
攻擊工程:
A(攻擊者)給B(被攻擊者)發送一個惡意構造了Web的URL。
B點擊並查看了這個URL。
惡意頁麵中的JavaScript打開一個具有漏洞的HTML頁麵並將其安裝在B電腦上。
具有漏洞的HTML頁麵包含了在B電腦本地域執行的JavaScript。
A的惡意腳本可以在B的電腦上執行B所持有的權限下的命令。
2.2 存儲式漏洞攻擊
該類型是應用最為廣泛而且有可能影響到Web服務器自身安全的漏洞,駭客將攻擊腳本上傳到Web服務器上,使得所有訪問該頁麵的用戶都麵臨信息泄漏的可能,其中也包括了Web服務器的管理員。
攻擊過程:
C擁有一個Web站點,該站點允許用戶發布信息/瀏覽已發布的信息。
A注意到C的站點具有存儲式漏洞。
A發布一個熱點信息,吸引其它用戶紛紛閱讀,該熱點信息中潛藏著一段XSS攻擊代碼。
C或者是任何的其他人B瀏覽該信息,其會話cookies或者其它信息將被A盜走或攻擊。
2.3 反射式漏洞攻擊
類似存儲式漏洞,不同的是Web客戶端使用Server端腳本生成頁麵為用戶提供數據時,如果未經驗證的用戶數據被包含在頁麵中而未經HTML實體編碼,客戶端代碼便能注入到動態頁麵中。
攻擊過程:
B經常瀏覽某個網站C。B使用用戶名/密碼進行登錄,並存儲敏感信息(比如銀行帳戶信息)在網站A中。
A發現C站點包含反射性的XSS漏洞,編寫一利用漏洞的URL,並將其冒充為來自C的郵件給B。
B在登錄到C的站點後,瀏覽A供的URL。
嵌入到URL中的惡意腳本在B的瀏覽器中執行,然後在B完全不知情的情況下將這些信息發送到A的Web站點。
3 XSS的防禦策略
3.1 過濾特殊字符或敏感字段
XSS攻擊也是利用了Web頁麵的編寫疏忽,所以有一種方法就是從Web應用開發的角度來避免。
(1) 對輸入數據進行驗證與過濾:
用戶在界麵輸入數據時,可以通過js對提交數據進行驗證和過濾,但這層驗證防禦很弱,很容易讓攻擊者攻破。除了在界麵前端驗證過濾外,我們還可以通過後台對頁麵提交過濾的數據進行驗證和過濾。嚴格的驗證可以讓web應用將可攻擊漏洞降到最小,同時也可以保證信息的安全性和係統正確性。
如:可以對用戶輸入<script>,<img>,<iframe>,http,src等敏感信息進行過濾。可以對數據格式進行驗證,比如郵箱輸入,必須滿足一定的郵箱格式。
(2) 對輸出數據進行過濾:
Web應用在將數據展現給用戶的時候,特別是那些由用戶輸入的數據在輸出時必須進行過濾後在展現給用戶界麵。
如:在jsp頁麵動態展現後台數據輸出信息是,可以使用:
<c:out value=”${xxx}”/>
輸出數據信息,這樣out標簽會對數據進行相應的過濾處理,即使數據中包含有攻擊性腳本代碼,也會過濾為文本的形式展現出來。
3.2 對敏感數據進行加密
這裏所說的敏感數據,就是關係到係統安全的數據,係統中重中之重的數據。
Web應用中往往最敏感的數據信息就是用戶信息(用戶名,密碼),對這些敏感信息的使用和存儲都要謹慎小心,因為web應用係統的根本就是用戶,一旦用戶信息被攻擊,可以想象整個web係統會遭受怎樣的攻擊和破壞。
(1) web係統中對敏感數據加密存儲:
在web係統中對敏感數據的存儲就兩種:一種是後台存儲,如數據庫存儲。一種是前端存儲,如cookie存儲。一種內存存儲,如session。不管是那種存儲都必須對安全數據進行加密存儲。
如數據庫存儲用戶密碼必須使用加密存儲,最好是使用不可破解不可逆的算法加密,如md5(當然MD5也可以通過窮舉法來破解,我們可以在md5基礎上加上特別的算法來加密);
如cookie存儲,如果用cookie來存儲敏感信息,最好是不要存儲實質性的敏感信息,而存儲一個加密的token信息,根據前端頁麵傳過來的token信息在後台代碼中匹配驗證或獲取相對應的信息。
參見:cookie使用安全 https://xmong.iteye.com/blog/1566102
如session存儲,對於這種內存中存儲的信息,要遵循,作用域最小化,能清則清。用戶信息如果能在request中使用的,就最好不要再session中使用。一是信息常駐內存,二存儲作用域擴大不夠安全。session中存儲用戶信息最好不要連帶用戶特敏感信息,如用戶密碼,能清則清。
(2) web係統中要安全使用敏感數據:
web係統中要安全使用敏感數據,對這些數據的使用訪問要有相應的權限控製和驗證,同時通信的過程中也要注意通信安全,如加密,采用SSL通道等
***************************
最後更新:2017-04-02 16:47:54