xss(cross-site scripting跨域腳本攻擊)攻擊是最常見的web攻擊,其重點是“跨域”和“用戶端執行”。有人将xss攻擊分為三種,分别是:
1. reflected xss(基于反射的xss攻擊)
2. stored xss(基于存儲的xss攻擊)
3. dom-based or local xss(基于dom或本地的xss攻擊)
reflected xss
基于反射的xss攻擊,主要依靠站點服務端傳回腳本,在用戶端觸發執行進而發起web攻擊。
例子:
1. 做個假設,當亞馬遜在搜尋書籍,搜不到書的時候顯示送出的名稱。
2. 在搜尋框搜尋内容,填入“<script>alert('handsome boy')</script>”, 點選搜尋。
3. 目前端頁面沒有對傳回的資料進行過濾,直接顯示在頁面上, 這時就會alert那個字元串出來。
4. 進而可以構造擷取使用者cookies的位址,通過qq群或者垃圾郵件,來讓其他人點選這個位址:
ps:這個位址當然是沒效的,隻是舉例子而已。
結論:
如果隻是1、2、3步做成功,那也隻是自己折騰自己而已,如果第4步能做成功,才是個像樣的xss攻擊。
開發安全措施:
1. 前端在顯示服務端資料時候,不僅是标簽内容需要過濾、轉義,就連屬性值也都可能需要。
2. 後端接收請求時,驗證請求是否為攻擊請求,攻擊則屏蔽。
例如:
标簽:
轉義
屬性:
如果一個input的value屬性值是
就可能出現
點選input導緻攻擊腳本被執行,解決方式可以對script或者雙引号進行過濾。
stored xss
基于存儲的xss攻擊,是通過發表帶有惡意跨域腳本的文章/文章,進而把惡意腳本存儲在伺服器,每個通路該文章/文章的人就會觸發執行。
1. 發一篇文章,裡面包含了惡意腳本
2. 後端沒有對文章進行過濾,直接儲存文章内容到資料庫。
3. 當其他看這篇文章的時候,包含的惡意腳本就會執行。
ps:因為大部分文章是儲存整個html内容的,前端顯示時候也不做過濾,就極可能出現這種情況。
後端盡可能對送出資料做過濾,在場景需求而不過濾的情況下,前端就需要做些處理了。
1. 首要是服務端要進行過濾,因為前端的校驗可以被繞過。
2. 當服務端不校驗時候,前端要以各種方式過濾裡面可能的惡意腳本,例如script标簽,将特殊字元轉換成html編碼。
dom-based or local xss
基于dom或本地的xss攻擊。一般是提供一個免費的wifi,但是提供免費wifi的網關會往你通路的任何頁面插入一段腳本或者是直接傳回一個釣魚頁面,進而植入惡意腳本。這種直接存在于頁面,無須經過伺服器傳回就是基于本地的xss攻擊。
例子1:
1. 提供一個免費的wifi。
1. 開啟一個特殊的dns服務,将所有域名都解析到我們的電腦上,并把wifi的dhcp-dns設定為我們的電腦ip。
2. 之後連上wifi的使用者打開任何網站,請求都将被我們截取到。我們根據http頭中的host字段來轉發到真正伺服器上。
3. 收到伺服器傳回的資料之後,我們就可以實作網頁腳本的注入,并傳回給使用者。
4. 當注入的腳本被執行,使用者的浏覽器将依次預加載各大網站的常用腳本庫。

這個其實就是wifi流量劫持,中間人可以看到使用者的每一個請求,可以在頁面嵌入惡意代碼,使用惡意代碼擷取使用者的資訊,可以傳回釣魚頁面。
例子2:
1. 還是提供一個免費wifi
2. 在我們電腦上進行抓包
3. 分析資料,可以擷取使用者的微信朋友圈、郵箱、社交網站帳号資料(http)等。
ps:這個是我的測試,在51job頁面登入時進行抓包,可以擷取帳号密碼。
這攻擊其實跟網站本身沒有什麼關系,隻是資料被中間人擷取了而已,而由于http是明文傳輸的,是以是極可能被竊取的。
總結
xss攻擊的特點就是:盡一切辦法在目标網站上執行非目标網站上原有的腳本(某篇文章說的)。本地的xss攻擊的示例2其實不算xss攻擊,隻是簡單流量劫持。前兩種xss攻擊是我們開發時候要注意的,而流量劫持的則可以使用https提高安全性,。
本文為原創文章,轉載請保留原出處,友善溯源,如有錯誤地方,謝謝指正。
轉載:http://www.cnblogs.com/lovesong/p/5199623.html