一、XSS漏洞原理
XSS,即跨站腳本攻擊,是指攻擊者利用Web服務器中的應用程序或代碼漏洞,在頁面中嵌入客戶端腳本(通常是一段由JavaScript編寫的惡意代碼,少數情況下還有ActionScript、VBScript等語言),當信任此Web服務器的用戶訪問Web站點中含有惡意腳本代碼的頁面或打開收到的URL鏈接時,用戶瀏覽器會自動加載并執行該惡意代碼,從而達到攻擊的目的。
當應用程序沒有對用戶提交的內容進行驗證和重新編碼,而是直接呈現給網站的訪問者時,就可能會觸發XSS攻擊。
二、XSS漏洞的危害
(1)竊取管理員帳號或Cookie。入侵者可以冒充管理員的身份登錄后臺,使得入侵者具有惡意操縱后臺數據的能力,包括讀取、更改、添加、刪除一些信息。
(2)竊取用戶的個人信息或者登錄帳號,對網站的用戶安全產生巨大的威脅。例如冒充用戶身份進行各種操作。
(3)網站掛馬。先將惡意攻擊代碼嵌入到Web應用程序之中。當用戶瀏覽該掛馬頁面時,用戶的計算機會被植入木馬。
(4)發送廣告或者垃圾信息。攻擊者可以利用XSS漏洞植入廣告,或者發送垃圾信息,嚴重影響到用戶的正常使用。
三、XSS漏洞的分類
1、反射型XSS
反射型XSS,也稱為非持久性XSS,是最常見的一種XSS。
XSS代碼常常出現在URL請求中,當用戶訪問帶有XSS代碼的URL請求時,服務器端接收請求并處理,然后將帶有XSS代碼的數據返回給瀏覽器,瀏覽器解析該段帶有XSS代碼的數據并執行,整個過程就像一次反射,故稱為反射型XSS。
該類攻擊的主要特點是它的及時性和一次性,即用戶提交請求后,響應信息會立即反饋給用戶。該類攻擊常發生在搜索引擎、錯誤提示頁面等對用戶的輸入做出直接反應的場景中。
2、存儲型XSS
存儲型XSS,也稱為持久性XSS。
在存儲型XSS中,XSS代碼被存儲到服務器端,因此允許用戶存儲數據到服務器端的Web應用程序可能存在該類型XSS漏洞。攻擊者提交一段XSS代碼后,服務器接收并存儲,當其他用戶訪問包含該XSS代碼的頁面時,XSS代碼被瀏覽器解析并執行。
存儲型XSS攻擊的特點之一是提交的惡意內容會被永久存儲,因而一個多帶帶的惡意代碼就會使多個用戶受害,故被稱為持久性XSS,它也是跨站腳本攻擊中危害最的一類。二是被存儲的用戶提交的惡意內容不一定被頁面使用,因此存在危險的響應信息不一定被立即返回,也許在訪問那些在時間上和空間上沒有直接關聯的頁面時才會引發攻擊,因此存在不確定性和更好的隱蔽性。
這類攻擊的一個典型場景是留言板、博客和論壇等,當惡意用戶在某論壇頁面發布含有惡意的Javascript代碼的留言時,論壇會將該用戶的留言內容保存在數據庫或文件中并作為頁面內容的一部分顯示出來。當其他用戶查看該惡意用戶的留言時,惡意用戶提交的惡意代碼就會在用戶瀏覽器中解析并執行。
3、DOM型XSS
DOM (Document Objet Model)指文檔對象模型。
DOM常用來表示在HTML和XML中的對象。DOM可以允許程序動態的訪問和更新文檔的內容、結構等。客戶端JavaScript可以訪問瀏覽器的文檔對象模型。也就是說,通過JavaScript代碼控制DOM節點就可以不經過服務器端的參與重構HTML頁面。
該類攻擊是反射型XSS的變種。它通常是由于客戶端接收到的腳本代碼存在邏輯錯誤或者使用不當導致的。比如Javascript代碼不正確地使用各種DOM方法(如document.write)和Javascript內部函數(如eval函數),動態拼接HTML代碼和腳本代碼就容易引發DOM型的跨站腳本攻擊。
因此,DOM型XSS與前面兩種XSS的區別就在于DOM型XSS攻擊的代碼不需要與服務器端進行交互,DOM型XSS的觸發基于瀏覽器端對DOM數據的解析來完成,也就是完全是客戶端的事情。
4、判斷是哪一種XSS
發送一次帶XSS代碼的請求,若只能在當前返回的數據包里發現XSS代碼,則是反射型;若以后這個頁面的返回包里都會有XSS代碼,則是存儲型;若在返回包里找不到XSS代碼,則是DOM型。
四、XSS漏洞的檢測與防御
1、檢測
手工檢測
手工檢測重點要考慮數據輸入的地方,且需要清楚輸入的數據輸出到什么地方。
在檢測的開始,可以輸入一些敏感字符,比如“<、>、()”等,提交后查看網頁源代碼的變化以發現輸入被輸出到什么地方,且可以發現相關敏感字符是否被過濾。
手工檢測結果相對準確,但效率較低。
工具檢測
常用工具有AVWS(Acunetix Web Vulnerability Scanner)、BurpSuite等。還有一些專門針對XSS漏洞的檢測工具,如:XSSer、XSSF(跨站腳本攻擊框架)、BeEF(The Browser Exploitation Framework)等。
2、防御
●使用黑名單進行
●對HTML標簽或特殊字符進行過濾
●使用內容安全的CSP
●使用設計上就會自動編碼的框架,如:OWASP ESAPI、React JS、JSOUP等,對于JAVA而言,可以使用ESAPI.encoder().encodeForHTML()對字符串進行HTML編碼。
●對于反射型和存儲型XSS,可以在數據返回給客戶端瀏覽器時,將敏感字符進行轉義,如:將單引號進行編碼替換(十進制編碼'、十六進制編碼'、HTML編碼&apos、Unicode編碼\u0027等)。
●對于DOM型XSS,可以使用上下文敏感數據編碼。如:在PHP中的htmlspecialchars()、htmlentities()函 數可以將一些預定義的字符轉換為HTML實體,如:小于轉化為<、大于轉化為>、雙引號轉化為"、單引號轉化為&apos、與轉化 為&等。
●啟用瀏覽器的HttpOnly特性可以組織客戶端腳本訪問cookie。如:在PHP中可以通過下面的代碼設置cookie并啟用HttpOnly。
<pre>`"<script>window.location = "http://www.baidu.com/"</script>"
</pre>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128406.html
摘要:禁止內聯腳本執行規則較嚴格,目前發現使用。典型的攻擊流程受害者登錄站點,并保留了登錄憑證。站點接收到請求后,對請求進行驗證,并確認是受害者的憑證,誤以為是無辜的受害者發送的請求。攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者完成了攻擊。 隨著互聯網的發展,各種Web應用變得越來越復雜,滿足了用戶的各種需求的同時,各種網絡安全問題也接踵而至。作為前端工程師的我們也逃不開這個問題,今天一起...
摘要:禁止內聯腳本執行規則較嚴格,目前發現使用。典型的攻擊流程受害者登錄站點,并保留了登錄憑證。站點接收到請求后,對請求進行驗證,并確認是受害者的憑證,誤以為是無辜的受害者發送的請求。攻擊完成,攻擊者在受害者不知情的情況下,冒充受害者完成了攻擊。 隨著互聯網的發展,各種Web應用變得越來越復雜,滿足了用戶的各種需求的同時,各種網絡安全問題也接踵而至。作為前端工程師的我們也逃不開這個問題,今天...
摘要:示例攻擊如何進行下圖展示了攻擊者如何進行攻擊攻擊者利用網站的表單插入惡意字符串到網站數據庫中。恰恰相反,至少有兩種常見的方式,會導致受害者發起針對自己的反射型攻擊。攻擊者精心構造了一個包含惡意字符串的,將其發送給受害者。 原文地址:http://excess-xss.com/。如有翻譯不當之處,歡迎指出 :D 分為四部分: 概述 XSS 攻擊 XSS 防御 總結 第一部分:概述 X...
摘要:比如基于的方法我認為只有是正當的繞過同源策略的方法同源策略是瀏覽器安全策略的基礎,但同源策略面對很多攻擊是無能為力的,比如跨站腳本攻擊,名字跟同源策略很像,事實上他們之間基本沒有關系。 作者:肖光宇 野狗科技聯合創始人,先后在貓撲、百度、搜狗任職,愛折騰的前端工程師。野狗官博:https://blog.wilddog.com/ 野狗官網:https://www.wilddog.com...