什麼是跨站指令碼 (XSS) 攻擊?
什麼是跨站指令碼?
跨站指令碼 (XSS) 是一種將惡意程式碼插入合法網站的技術,目的是出於惡意目的捕獲使用者資訊。
攻擊者試圖透過在真實的網頁或 Web 應用程式中插入惡意程式碼,在受害者的 Web 瀏覽器上執行有害指令碼。
當受害者訪問包含惡意程式碼的網站或使用 Web 應用程式時,就會發生真正的攻擊。惡意指令碼透過網頁或應用程式傳遞到使用者的瀏覽器。
論壇、留言板和具有評論功能的線上頁面是跨站指令碼攻擊的典型目標。
當網頁或 Web 應用程式生成包含未經清理的使用者輸入的輸出時,就會被稱為 XSS。此使用者輸入必須由受害者的瀏覽器進行解析。
XSS 攻擊可以在 VBScript、ActiveX、Flash 甚至 CSS 中執行。但是,它們在 JavaScript 中最為普遍,因為 JavaScript 對大多數瀏覽器體驗至關重要。
如果攻擊者可以利用網頁上的 XSS 漏洞在使用者的瀏覽器中執行任意 JavaScript,則該易受攻擊的網站或線上應用程式以及其使用者的安全性就會受到損害。
跨站指令碼可用於篡改網站。攻擊者可以使用注入的指令碼更改網站內容,甚至將瀏覽器重定向到另一個網站,例如包含惡意程式碼的網站。
跨站指令碼 (XSS) 攻擊的型別
XSS 攻擊有多種形式。它們被歸類為以下類別:
永續性 XSS
這種型別的漏洞,也稱為儲存型 XSS,發生在目標伺服器上儲存了不可信或未經驗證的使用者輸入時。留言板、評論部分和訪客日誌都是永續性 XSS 的常見目標——任何其他使用者(已認證和未認證)都能看到攻擊者惡意文字的功能。
永續性 XSS 的一個很好的示例是公開可用的個人資料頁面,例如在社交媒體網站和會員組中看到的那些頁面。當其他使用者檢視個人資料時,他們的瀏覽器會自動執行攻擊者在個人資料框中輸入的程式碼。
反射型 XSS
另一方面,反射型或非永續性跨站指令碼涉及使用者輸入的立即返回。攻擊者必須誘使使用者將資料傳輸到目標站點才能利用反射型 XSS,這通常是透過欺騙使用者點選惡意設計的連結來完成的。
反射型 XSS 攻擊通常依賴於包含已截斷或以其他方式隱藏的 URL 的網路釣魚電子郵件,然後再將其傳輸到目標使用者。當受害者點選連結時,指令碼就會在受害者的瀏覽器中執行。
反射型 XSS 通常針對搜尋結果和錯誤訊息站點。它們通常在響應中傳送未經修改的使用者輸入,而沒有適當地轉義資料,以便可以在瀏覽器中安全地顯示。
基於 DOM 的 XSS
基於 DOM 的跨站指令碼(也稱為客戶端 XSS)類似於反射型 XSS,因為它通常透過包含有害指令碼的惡意 URL 提供。攻擊完全在瀏覽器中執行,而不是透過更改 DOM(文件物件模型)將有效負載包含在受信任站點的 HTTP 響應中。這針對頁面上已有的合法 JavaScript,並且未能正確清理使用者輸入。
XSS 的危害是什麼?
XSS 利用對網站的影響取決於目標應用程式或站點以及受損資料和使用者。以下通常適用於 XSS 攻擊的潛在影響:
如果涉及敏感資料,例如銀行交易或醫療記錄,則後果可能非常嚴重。
受損使用者在應用程式中擁有的許可權越多,攻擊的後果就可能越嚴重。
使用者輸入敏感的個人身份資訊的後果可能非常嚴重。
跨站指令碼可能對整個公司產生重大影響。如果發現電子商務網站是 XSS 攻擊的來源,則可能會損害公司的聲譽和客戶信任。
如何查詢和測試 XSS 漏洞?
Burp Suite 的 Web 漏洞掃描程式可以快速準確地檢測大多數 XSS 漏洞。
手動測試反射型和儲存型 XSS 通常涉及在應用程式中的每個入口點輸入一些簡單、唯一的輸入(例如一個短的字母數字字串),同時它識別提交的輸入在 HTTP 響應中返回的每個位置,並分別測試每個位置以檢視是否可以利用精心製作的輸入來執行任意 JavaScript。這使您能夠識別 XSS 發生的環境並選擇合適的有效負載來利用它。
手動測試 URL 引數中的基於 DOM 的 XSS 遵循類似的模式:
在引數中輸入一些簡單、唯一的輸入。
使用瀏覽器的開發者工具在 DOM 中搜索此輸入。
測試每個位置以檢視它是否可利用。
另一方面,其他型別的 DOM XSS 更難以檢測。要發現非基於 URL 的輸入(例如 document.cookie)或非基於 HTML 的接收器(例如 setTimeout)中的基於 DOM 的漏洞,沒有比研究 JavaScript 程式碼更好的方法了,這可能非常耗時。Burp Suite 中的 Web 漏洞掃描程式結合了靜態和動態 JavaScript 分析,可以成功地找到基於 DOM 的漏洞。
如何保護自己免受 XSS 攻擊?
由於存在如此多種型別的跨站指令碼攻擊,企業需要了解如何保護自己並避免未來的問題。由於其日益複雜,網站比以往任何時候都更難以嚴格監控。隨著時間的推移,攻擊的頻率可能會增加。
以下建議可以幫助保護您的使用者免受 XSS 攻擊:
應清理使用者輸入。驗證使用者輸入以捕獲可能存在危害的輸入。對輸出進行編碼,以避免瀏覽器自動載入並執行行為,而此行為是由潛在危險的使用者提供的資料觸發的。
限制使用者提供的資料的使用。
利用內容安全策略。提供了針對 XSS 攻擊的額外保護和緩解層。定期使用 Web 應用程式漏洞掃描工具來檢測軟體中的 XSS 漏洞。
雖然 XSS 攻擊仍然是一種流行(且成功的)攻擊媒介,但您可以透過實施謹慎的設計和測試來保護自己,以確保您的網站或 Web 應用程式不受攻擊(並保護您的使用者)。