1、XSS
XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,爲了不與CSS(Cascading Style Sheets)混淆,故將跨站腳本攻擊縮寫爲XSS,XSS是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web用戶將代碼植入到提供給其它用戶使用的頁面中。
通俗的來說就是我們的頁面在加載並且渲染繪製的過程中,如果加載並執行了意料之外的程序或代碼(腳本、樣式),就可以認爲是受到了 XSS攻擊。
-
XSS更多是發生在web前端的一種漏洞,所以危害的對象主要還是前端用戶。
XSS
2、XSS的危害
- 掛馬。
- 盜取用戶Cookie、賬號等信息。
- DOS(拒絕服務)客戶端瀏覽器。
- 前端JS挖礦。
- 釣魚攻擊,高級的釣魚技巧。
- 刪除目標文章、惡意篡改數據、嫁禍。
- 劫持用戶Web行爲,甚至進一步滲透內網。
- 爆發Web2.0蠕蟲。
- 蠕蟲式的DDoS攻擊。
- 蠕蟲式掛馬攻擊、刷廣告、刷瀏量、破壞網上數據
3、XSS分類
-
反射型:
也叫非持久型XSS,交互數據一般不會被存在數據庫裏面,一次性,所見即所得。一般XSS代碼出現在請求URL中,作爲參數提交到服務器,服務器解析並響應,響應結果中包含XSS代碼,最後瀏覽器解析並執行。場景:
1、用戶A給用戶B發送一個惡意構造了Web的URL。
2、用戶B點擊並查看了這個URL。
3、用戶B獲取到一個具有漏洞的HTML頁面並顯示在本地瀏覽器中。
4、漏洞HTML頁面執行惡意JavaScript腳本,將用戶B信息盜取發送給用戶A,或者篡改用戶B看到的數據等。反射型XSS
-
存儲型:
也叫持久型XSS,主要將XSS代碼提交存儲在服務器端(數據庫,內存,文件系統等),下次請求目標頁面時不用再提交XSS代碼。當目標用戶訪問該頁面獲取數據時,XSS代碼會從服務器解析之後加載出來,返回到瀏覽器做正常的HTML和JS解析執行,XSS攻擊就發生了。
場景:
1、用戶A在網頁上創建了某個賬戶,並且賬戶信息中包含XSS代碼。
2、用戶B訪問該網站查看XSS代碼賬戶詳情頁面。
3、服務端返回賬戶詳情頁面,和帶XSS賬戶信息。
4、用戶B瀏覽器執行XSS代碼,將用戶B信息盜取發送給用戶A,或者篡改用戶B看到的數據等。存儲型XSS
-
DOM型
一種特殊的反射型XSS。由客戶端的腳本程序可以動態地檢查和修改頁面內容,而不依賴於服務器端的數據。一般從url中提取數據中含xss,未過濾並在本地執行dom的渲染操作,輸入來源多是document.location、document.URL、document.URLUnencoded、document.referrer、window.location等,而觸發api多是document.write()、document.writeln()、document.innerHtml、eval()、window.execScript()、window.setInterval()、window.setTimeout()等。
場景:
1、用戶B訪問網站url中帶有XSS代碼參數。
2、瀏覽器下載該網站JavaScript腳本。
3、JavaScript腳本有個方法獲取URL中XSS代碼參數,並且用innerHtml渲染在dom中。
4、觸發XSS代碼,造成XSS攻擊,cookie數據失竊。DOM型XSS
4、示例分析
1、入參不嚴謹,對入參沒做任何規則校驗。
2、用參太隨意,對未知參數未過濾,直接丟給dom操作。
漏洞演示:機密性 - 竊取用戶cookie信息
-
步驟1:藉助https://xss.fbisb.com平臺,創建項目test
步驟1
-
步驟2:再利用平臺提供的xss代碼:https://xss.fbisb.com/JGtp
-
步驟3
-
步驟4
-
步驟5
-
步驟6:利用無痕瀏覽器訪問目標網站,將cookie信息寫入,免登陸進入平臺
5、如何避免XSS攻擊
- innerHTML(原生)、v-html(vue)、dangerouslySetInnerHTML(react)等直接渲染html的函數慎用,確保渲染的數據是由前端寫死的、無危害的纔可直接使用;
- 使用innerHTML(原生)、v-html(vue)、dangerouslySetInnerHTML(react)等直接渲染html的函數渲染請求數據時,需要先把字符串轉義:
1)、把 > 替換成>
2)、把<
替換成<
3)、把 & 替換成&``;
4)、把 " 替換成"``;
5)、把 ' 替換成'``;
- 字符過濾:
1)、過濾掉特殊的HTML標籤,例如<script>
、<iframe>
等;
2)、過濾掉Javascript事件標籤,例如"onclick"
、"onfocus"
等; - Http Only cookie;
- 輸入檢查:對產品輸入要求格式嚴謹檢查過濾;
6、討論&思考
1.學習規範安全編碼
根在人爲,如果沒有規範的學習過前端知識,特別是安全規範知識,直接跨端做前端開發的時候,很多時候知道一個功能怎麼去實現,然後百度找api,找到api發現可以使用即可,通常會發生爲了實現功能而忽略安全。所以我們在找到可用api時,還得查歷該api是否存在安全隱患,需要如何規避、或者有其他更安全的api。
2.對不可信數據保持敏感
對於任何非前端代碼數預置數據,保持敏感對待,是否用於dom操作渲染,如果是則需要做相應的過濾處理,或者換其他安全實現方式。
作者:Chen_JF
鏈接:https://www.jianshu.com/p/2818a8b75aed
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。