第3章 跨站腳本攻擊(XSS)
3.1 XSS簡介
- Cross Site Script,跨站腳本攻擊,簡稱XSS。
- XSS攻擊,通常是指黑客通過“HTML注入”篡改了網頁,插入了惡意的腳本,從而在客用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。
- XSS分類
- 反射型XSS
- 存儲型XSS
- DOM Based XSS
3.2 XSS攻擊進階
- XSS Payload
- JavaScript腳本
- 最簡單的:竊取Cookie的XSS Payload
- Cookie的“HttpOnly”標識可以防止“Cookie劫持”
- 強大的XSS Payload
- 構造GET與POST請求
- 刪除博客:JacvaScript代碼
- 提交表單:JavaScript發出POST請求
- HTML代碼構造表單
- XMLHttpRequest發送POST請求
- 瀏覽器的擴展和插件
- CSS History Hack
- 獲取用戶的真實IP地址
- Javascript本身沒有此能力。藉助第三方軟件來完成
- 如調用Java Applet的接口獲取客戶端的本地IP地址。
- 構造GET與POST請求
- XSS攻擊平臺
- Attack API
- BeEF
- XSS-Proxy
- 終極武器:XSS Worm
- Samy Worm
- 一般來說,用戶之間發生交互行爲的頁面,如果存在存儲型XSS,則比較容易發起XSS Worm攻擊。
- 百度空間蠕蟲
- Samy Worm
- 調試JavaScript
- 調試JavaScript,需要有很好的JavaScript工地,調試JavaScript是必不可少的技能。
- Firebug
- IE 8 Developer Tools
- Fiddler
- HttpWatch
- XSS構造技巧
- 利用字符編碼
- 繞過長度限制
- 利用事件(Event)縮短所需要的字節數
- 最好的辦法是把XSS Payload寫到別處,再通過簡短的代碼加載這段XSS Payload
- loacation.hash
- 利用註釋符繞過長度限制
- 使用
<base>
標籤 - window.name的妙用
- 變廢爲寶:Mission Impossible
- Apache Expect Header XSS
- Anehta的迴旋鏢
- 容易被忽視的角落:Flash XSS
- 在Flash中是可以嵌入ActionScript腳本的
- 真的高枕無憂嗎:JavaScript框架
3.3XSS的防禦
- HttpOnly
- 輸入檢查
- 輸出檢查
- 安全的編碼函數
- 只需一種編碼嗎
- 正確地防禦XSS
- XSS的本質還是一種“HTML”注入,用戶的數據被當成了HTML代碼一部分來執行,從而混淆了原來的語義,產生了新的語義。
- 想要根治XSS問題,可以列出所有XSS可能發生的場景,再一一解決。
- 下面用變量“$var”表示用戶數據,它將被填充入HTML代碼中。可能存在以下場景:
- 在HTML標籤中輸出
- 在HTML屬性中輸出
- 在
<script>
標籤中輸出 - 在CSS中輸出
- 在地址中輸出
- 處理富文本
- HTML
- CSS
- 防禦DOM Based XSS
- 換個角度看XSS的風險
- 前面談到的所有XSS攻擊,都是從漏洞形成的原理上看的。下面從業務風險的角度來看。
- 一般來說,存儲型XSS的風險會高於反射型XSS
- 從攻擊過程來說
- 反射型XSS,一般要求攻擊者誘使用戶點擊一個包含XSS代碼的URL鏈接。
- 存儲型XSS,則只需要讓用戶查看一個正常的URL鏈接。
- 從風險的角度來看
- 用戶之間有互動的頁面,是可能發起XSS Worm攻擊的地方。
- 根據不同頁面的PageView高低,也可以分析出哪些頁面受XSS攻擊後的影響會更大。
- 從攻擊過程來說
3.4 小結
理論上,XSS漏洞雖然複雜,但卻是可以徹底解決的。
在設計XSS防禦方案時,深入理解XSS攻擊的原理,針對不同的場景使用不同的方法。