Cross-site scripting 攻擊會誘騙 Web 瀏覽器執行惡意程式碼。
閱讀本文後,您將能夠:
複製文章連結
Cross-site scripting (XSS) 是一種漏洞利用,攻擊者將程式碼附加到合法網站上,當受害者載入網站時,程式碼就會執行。惡意程式碼可以透過幾種方式插入。最常見的是新增到 URL 的末尾,或者直接發佈到顯示使用者所產生內容的頁面上。用更專業的詞彙來說,Cross-site scripting 是一種用戶端程式碼插入攻擊。
用戶端程式碼是在使用者電腦上執行的 JavaScript 程式碼。就網站而言,用戶端程式碼通常是在瀏覽器載入網頁後由 Web 瀏覽器執行的程式碼。這與伺服器端程式碼相反——伺服器端程式碼在主機的 Web 伺服器上執行。用戶端程式碼對於互動式網頁非常有用;可以讓互動式內容的執行速度更快、更可靠,因為使用者的電腦不必在每次互動時都與 Web 伺服器進行通訊。基於瀏覽器的遊戲是熱門的用戶端程式碼平台,因為用戶端程式碼可以確保遊戲順利運行,而不用考慮連線問題。
在用戶端執行的程式碼在現代 Web 開發中非常流行,並在大多數現代網站中得到利用。由於跨網站程式碼是現代 Web 的基本內容,因此 Cross-site scripting 已成為最常見的網路安全漏洞之一;Cross-site scripting 攻擊已攻擊了 YouTube、Facebook 和 Twitter 等知名網站。
Cross-site scripting 攻擊的一個常見範例是在具有未驗證評論論壇的網站上。在這種情況下,攻擊者發佈評論,其中包含用「<script></script>」標記括起來的可執行程式碼。這些標記告訴 Web 瀏覽器將標記之間的所有內容解讀為 JavaScript 程式碼。評論出現在頁面上之後,任何其他使用者載入網站時,其 Web 瀏覽器將執行指令碼標記之間的惡意程式碼,而使用者則成為攻擊的受害者。
JavaScript Cross-site scripting 攻擊十分熱門,因為 JavaScript 可以存取一些敏感性資料,用於身分盜竊和其他惡意目的。例如,JavaScript 可以存取 cookie*,攻擊者可以利用 XSS 攻擊來竊取使用者的 cookie 並在線上冒充他們。JavaScript 還可以建立 HTTP 要求,這些要求可用於將資料(例如,被盜的 cookie)傳回給攻擊者。此外,用戶端 JavaScript 還可以協助攻擊者存取包含地理位置座標、網路攝影機資料和其他敏感性資訊的 API。
典型的 Cross-site scripting 攻擊流程如下:
*Cookie 是儲存在使用者電腦上的臨時登入認證。例如,當使用者登入 Facebook 之類的網站時,該網站為他們提供一個 cookie,這樣,如果他們關閉瀏覽器視窗並在當日晚些時候回到 Facebook,將自動由該 cookie 進行驗證,而無需再次登入。
最常見的兩種 Cross-site scripting 攻擊類型是反射式 Cross-site scripting 和持久性 Cross-site scripting。
這是最常見的 Cross-site scripting 攻擊。透過反射攻擊,惡意程式碼被新增到網站 URL 的末尾;通常,這是一個合法的、值得信賴的網站。當受害者在 Web 瀏覽器中載入此連結時,瀏覽器將執行插入到 URL 中的程式碼。攻擊者通常使用某種形式的社交工程來誘騙受害者點擊連結。
例如,使用者可能會收到一封看起來合法的電子郵件,聲稱來自銀行。該電子郵件將要求使用者在銀行的網站上執行一些動作,並提供一個連結。該連結可能看起來像這樣:
http://legitamite-bank.com/index.php?user=<script>here is some bad code!</script>
儘管 URL 的第一部分看起來很安全,並且包含受信任網站的網域,但插入到 URL 末尾的程式碼可能是惡意的。
持久性 Cross-site scripting 發生的網站通常會允許使用者發佈其他使用者可看到的內容,例如評論論壇或社交媒體網站。如果網站沒有正確驗證使用者所產生內容的輸入,攻擊者可以插入程式碼,當頁面在其他使用者的瀏覽器中載入時,瀏覽器將執行該程式碼。例如,攻擊者可能會存取一個線上約會網站,在他們的設定檔中放置如下內容:
"Hi! My name is Dave, I enjoy long walks on the beach and <script>malicious code here</script>"
任何嘗試存取 Dave 設定檔的使用者都將成為 Dave 持久性 Cross-site scripting 攻擊的受害者。
沒有單一的策略可以緩解 Cross-site scripting,不同類型的 Web 應用程式需要不同層級的防護。可以採取一些保護措施,下面將簡要介紹其中一些方法。
盡可能避免在輸入中使用 HTML:避免持久性 Cross-site scripting 攻擊的一種非常有效的方法是防止使用者將 HTML 發佈到表單輸入中。有一些其他選項可以讓使用者在不使用 HTML 的情況下建立豐富的內容,例如 markdown 和 WYSIWYG 編輯器。
驗證輸入:驗證意味著實作規則,以防止使用者將資料發佈到不符合某些準則的表單中。例如,要求輸入使用者「姓氏」的輸入應具有驗證規則,只允許使用者提交包含英數字元的資料。驗證規則也可以設定為拒絕 Cross-site scripting 中常用的任何標記或字元,例如「<script>」標記。
清理資料:清理資料與驗證相似,但是它發生在資料發佈到 Web 伺服器之後、顯示給其他使用者之前。有幾種線上工具可以清除 HTML 並篩除惡意程式碼插入。
採取 cookie 安全措施:Web 應用程式還可以為其 cookie 處理設定特殊規則,從而緩解透過 Cross-site scripting 攻擊進行的 cookie 盜竊。Cookie 可以綁定到特定的 IP 位址,以便 Cross-site scripting 攻擊者無法存取它們。此外,還可以乾脆建立規則來阻止 JavaScript 存取 Cookie。
設定 WAF 規則:WAF 也可以設定為強制執行規則,以防止反射性 Cross-site scripting。這些 WAF 規則採用策略封鎖對伺服器的奇怪要求,包括 Cross-site scripting 攻擊。Cloudflare WAF 提供周全的安裝,可保護 Web 應用程式免受 Cross-site scripting 攻擊、DDoS 攻擊、SQL 資料隱碼攻擊和其他常見威脅的侵害。