Stories

Detail Return Return

常見的XSS漏洞和防禦方式 - Stories Detail

XSS全稱跨站腳本(Cross Site Scripting),為避免與層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故縮寫為XSS。

這是一種將任意 Javascript 代碼插入到其他Web用户頁面裏執行以達到攻擊目的的漏洞。攻擊者利用瀏覽器的動態展示數據功能,在HTML頁面裏嵌入惡意代碼。當用户瀏覽改頁時,這些潛入在HTML中的惡意代碼會被執行,用户瀏覽器被攻擊者控制,從而達到攻擊者的特殊目的,如 cookie竊取等。
XSS的防禦很複雜,並不是一套防禦機制就能就解決的問題,它需要具體業務具體實現。
目前來説,流行的瀏覽器內都內置了一些 XSS過濾器,但是這隻能防禦一部分常見的XSS,而對於網站來説,也應該一直尋求優秀的解決方案,保護網站及用户的安全。

image.png

XSS產生原因

形成XSS漏洞的主要原因是程序對輸入和輸出的控制不夠嚴格,導致“精心構造”的腳本輸入後,在輸到前端時被瀏覽器當作有效代碼解析執行從而產生危害。

XSS會造成哪些危害?

攻擊者通過Web應用程序發送惡意代碼,一般以瀏覽器腳本的形式發送給不同的終端用户。當一個Web程序的用户輸入點沒有進行校驗和編碼,將很容易的導致XSS。
1、網絡釣魚,包括獲取各類用户賬號
2、竊取用户cookies資料,從而獲取用户隱私信息,或利用用户身份進一步對網站執行操作
3、劫持用户(瀏覽器)會話,從而執行任意操作,例如非法轉賬、強制發表日誌、電子郵件等
4、強制彈出廣告頁面、刷流量等
5、網頁掛馬
6、進行惡意操作,如任意篡改頁面信息、刪除文章等
7、進行大量的客户端攻擊,如ddos等
8、獲取客户端信息,如用户的瀏覽歷史、真實p、開放端口等
9、控制受害者機器向其他網站發起攻擊
10、結合其他漏洞,如csrf,實施進步危害
11、提升用户權限,包括進一步滲透網站
12、傳播跨站腳本蠕蟲等

XSS常見出現的地方

1、數據交互
●  get、post、cookies、headers
●  反饋與瀏覽
●  富文本編輯器
●  各類標籤插入和自定義

2、數據輸出
●  用户資料
●  關鍵詞、標籤、説明
●  文件上傳

XSS的分類

1、反射性XSS

又稱非持久型XSS,這種攻擊方式往往具有一次性,只在用户單擊時觸發。跨站代碼一般存在鏈接中,當受害者請求這樣的鏈接時,跨站代碼經過服務端反射回來,這類跨站的代碼通常不存儲服務端。

常見注入點
●  網站的搜索欄
●  用户登錄入口
●  輸入表單
常用來竊取客户端cookies或釣魚欺騙,漏洞產生原因一般是網站只是簡單地將用户輸入的數據直接或未經過完善的安全過濾就在瀏覽器中進行輸岀,導致輸岀的欻據中存在可被瀏覽器執行的代碼數據

攻擊方式
攻擊者通過電子郵件等方式將包含XSS代碼的惡意鏈接發送給目標用户。當目標用户訪問該鏈接時,服務器接受該目標用户的請求並進行處理,然後服務器把帶有XSS的代碼發送給目標用户的瀏覽器,瀏覽器解析這段帶有XSS代碼的惡意腳本後,就會觸發XSS漏洞。
由於此種類型的跨站代碼存在於URL中,所以黑客通常需要通過誘騙或加密變形等方式將存在惡意代碼的鏈接發給用户,只有用户點擊以後才能使得攻擊成功實施。

反射型XSS攻擊的流程
1.攻擊者尋找具有漏洞的網站
2.攻擊者給用户發了一個帶有惡意字符串的鏈接
3.用户點擊了該鏈接
4.服務器返回HTML文檔,此時該文檔已經包含了那個惡意字符串
5.客户端執行了植入的惡意腳本,XSS攻擊就發生
image.png

2、存儲型XSS

存儲型XSS( Stored xss Attacks),也是持久型XSS,比反射型XSS更具有威脅性。。攻擊腳本將被永久的存放在目標服務器的數據庫或文件中。這是利用起來最方便的跨站類型,跨站代碼存儲於服務端(比如數據庫中)。

常見注入點
●  論壇
●  博客
●  留言板
●  網站的留言
●  評論
●  日誌
造成漏洞原因一般是由於Web應用程序對用户輸入數據的不嚴格,導致Web應用程序將黑客輸入的惡意跨站攻擊數據信息保存在服務端的數據庫或其他文件形式中。

攻擊方式
攻擊者在發帖或留言的過程中,將惡意腳本連同正常信息一起注入到發佈內容中。隨着發佈內容被服務器存儲下來,惡意腳本也將永久的存放到服務器的後端存儲器中。當其他用户瀏覽這個被注入了惡意腳本的帖子時,惡意腳本就會在用户的瀏覽器中得到執行。

存儲型XSS攻擊的流程
1.用户提交了一條包含XSS代碼的留言到數據庫
2.當目標用户查詢留言時,那些留言的內容會從服務器解析之後加載出來
3.瀏覽器發現有XSS代碼,就當做正常的HTML和JS解析執行
image.png

3、DOM型XSS

DoM是文檔對象模型( Document Object Model)的縮寫。它是HTML文檔的對象表示,同時也是外部內容(例如 JavaScript)與HTML元素之間的接口。解析樹的根節點是“ Document"對象。DOM( Document object model),使用DOM能夠使程序和腳本能夠動態訪問和更新文檔的內容、結構和樣式。
它是基於DoM文檔對象的一種漏洞,並且DOM型XSS是基於JS上的,並不需要與服務器進行交互。其通過修改頁面DOM節點數據信息而形成的ⅩSS跨站腳本攻擊。不同於反射型XSS和存儲型XSS,基於DOM的XSS跨站腳本攻擊往往需要針對具體的 Javascript DOM代碼進行分析,並根據實際情況進行XSS跨站腳本攻擊的利用。
一種基於DOM的跨站,這是客户端腳本本身解析不正確導致的安全問題。

常見注入點
●  通過js腳本對對文檔對象進行編輯,從而修改頁面的元素
也就是説,客户端的腳本程序可以DOM動態修改頁面的內容,從客户端獲取DOM中的數據並在本地執行。由於DOM是在客户端修改節點的,所以基於DOM型的XSS漏洞不需要與服務器端交互,它只發生在客户端處理數據的階段。

攻擊方式
用户請求一個經過專門設計的URL,它由攻擊者提供,而且其中包含XSS代碼。服務器的響應不會以任何形式包含攻擊者的腳本,當用户的瀏覽器處理這個響應時,DOM對象就會處理XSS代碼,導致存在XSS漏洞。

DOM型XSS攻擊流程
1.攻擊者尋找具有漏洞的網站
2.攻擊者給用户發了一個帶有惡意字符串的鏈接
3.用户點擊了該鏈接
4.服務器返回HTML文檔,但是該文檔此時不包含那個惡意字符串
5.客户端執行了該HTML文檔裏的腳本,然後把惡意腳本植入了頁面
6.客服端執行了植入的惡意腳本,XSS攻擊就發生了
image.png

反射型XSS與DOM型區別:

1、反射型XSS攻擊中,服務器在返回HTML文檔的時候,就已經包含了惡意的腳本。
2、DOM型ⅩSS攻擊中,服務器在返回HTML文檔的時候,是不包含惡意腳本的;惡意腳本是在其執行了非惡意腳本後,被注入到文檔裏的通過JS腳本對對文檔對象進行編輯,從而修改頁面的元素。也就是説,客户端的腳本程序可以DOM動態修改頁面的內容,從客户端獲取DOM中的數據並在本地執行。由於DOM是在客户端修改節點的,所以基於DOM型的XSS漏洞不需要與服務器端交互,它只發生在客户端處理數據的階段。

如何防禦XSS漏洞攻擊

1、輸入驗證與過濾:對用户輸入的數據進行嚴格的驗證和過濾,過濾掉所有非法的HTML、JavaScript等特殊字符,只接受符合預期格式的輸入。
2、轉義輸出數據:在將用户輸入數據輸出到網頁時,使用合適的轉義方式確保所有用户輸入都被視為純文本而不是HTML或JavaScript代碼。
3、HTTP頭部設置:通過設置HTTP頭部中的Content-Security-Policy(CSP)等相關安全頭部,限制瀏覽器執行外部資源和腳本,從而有效防禦XSS攻擊。
4、使用安全框架和庫:使用諸如XSS過濾器、安全框架(如OWASP ESAPI)、安全編程庫等工具和技術來幫助開發者檢測和預防XSS漏洞。
5、安全培訓與意識:對開發人員進行安全培訓,增強其對XSS漏洞的識別和防範意識,使其編寫更加安全的代碼。
6、使用德迅雲安全SCDN:安全加速(Secure Content Delivery Network,SCDN)是德迅雲安全推出的集分佈式DDoS防護、CC防護、WAF防護、BOT行為分析為一體的安全加速解決方案。擁有Web攻擊防護功能,有效防禦 SQL注入、XSS攻擊、命令/代碼執行、文件包含、木馬上傳、路徑穿越、惡意掃描等OWASP TOP 10攻擊。專業的攻防團隊7*24小時跟進0day漏洞,分析漏洞原理,並制定安全防護策略,及時進行防護。
搭載智能語義解析引擎,提供智能語義解析功能,在漏洞防禦的基礎上,增強SQL注入和XSS攻擊檢測能力。
image.png

總結

理論上來説,XSS 漏洞雖然複雜,但是卻是可以徹底解決掉的,在設計 XSS 解決方案時,要結合目前的業務需求,從業務風險角度定義每個 XSS 漏洞,針對不同的場景使用不同的方法,同時,很多開源的項目可以借鑑參考,完善自己的 XSS 解決方案。

user avatar timerrring Avatar yinguan_chen Avatar bmtmicro Avatar
Favorites 3 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.