Cross Site Scripting (XSS)
Concept
駭客輸入惡意的程式碼在網站上,若該網站沒有驗證使用者輸入,就直接輸出在網頁上,惡意的程式碼就會被執行,造成點擊到該網頁的人遭受到攻擊。簡單來說就是駭客可以在你的網站上面執行 JavaScript 的程式碼。
概念上像是埋一個地雷在受害的網頁上,主要分為三類:
- Relfective XSS
- Persistent/Stored XSS
- Dom-based XSS
Relfective XSS
- 例如該網站直接將使用者搜尋的輸入,直接顯示在網頁上
Persistent/Stored XSS
- 不同於 Reflective XSS 的是,該惡意程式碼是被存到網站的資料庫裡面的.惡意程式碼不是當下被輸入的。
Dom-based XSS
- Dom-based XSS 的攻擊原理跟 Reflective XSS 攻擊原理相似,差別只在 Reflective XSS 有經過 Server 端,而 Dom-based 的攻擊只發生在 Client 端。
常見的攻擊手法
Redirect 攻擊
網址重導致釣魚網站,造成帳號密碼盜取
1 | <script> |
Virtual Site Defacement 攻擊
駭客在頁面上插入奇怪的元素,讓你的網站無法被使用
Cookie偷取 (Cookie Theft)
網頁重導並傳送Cookie到目標網站
1 | <script> |
密碼偷取 (Password Theft)
在頁面插入假的輸入帳號密碼表單,並將帳密傳到駭客主機
Same Origin Policy 失能
有XSS漏洞的網站,駭客插入惡意程式碼,會被視為與的程式碼「同源」,故失去同源政策的保護
防禦方式
Contextual Output Encoding
針對網頁不同的情境(Context),在網頁輸出時做特殊編碼處理,讓browser原本會認為程式碼的內容轉為非程式碼處理
- HTML Entity Context
- HTML Attributes Context
- URL Fragment Context
- Script Context
- Style Context
HTML Sanitization
在某些情況下需要User輸入程式碼,此時透過Sanitization來過濾惡意程式碼,讓他轉程安全的程式碼
X-Xss-Protection
瀏覽器大多支援XSS防護功能,開啟此功能需要在HTTP Resposne header設定
- HTTP Resposne header設定
X-Xss-Protection: 1; mode=block
Content-Security-Policy
用來跟瀏覽器講說哪些來源的資源可以被載入,哪些不行。做以下的設定,並且不要使用 ‘unsafe-inline’
- HTTP Header設定
Content-Security-Policy: script-src ‘self’ ‘nonce-2726c7f26c’
- 程式碼
1 | <script nonce="2726c7f26c"> |
Cookies保護
在 HTTP Response Header 中將重要的 Cookie 設定為 HTTP Only.確保該cookie不能被client端程式碼存取。
- HTTP Header設定
Set-Cookie: NAME=VALUE; expires=EXPIRES; path=PATH;
domain=DOMAIN;secure; httponly;
reference
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment