Http-only原理與防禦XSS實踐
預備知識
XSS攻擊
Http-only的設計主要是用來防禦XSS攻擊,所以學習本實驗的讀者應首先了解XSS攻擊的相關原理內容。
跨站點指令碼攻擊是困擾Web伺服器安全的常見問題之一。跨站點指令碼攻擊是一種伺服器端的安全漏洞,常見於當把使用者的輸入作為HTML提交時,伺服器端沒有進行適當的過濾所致。跨站點指令碼攻擊可能引起洩漏Web 站點使用者的敏感資訊。為了降低跨站點指令碼攻擊的風險,微軟公司的Internet Explorer 6 SP1引入了一項新的特性。
對於很多隻依賴於cookie驗證的網站來說,Http-only cookies是一個很好的解決方案,在支援Http-only cookies的瀏覽器中(IE6以上,FF3.0以上),Javascript是無法讀取和修改Http-only cookies,這樣可讓網站使用者驗證更加安全。
實驗目的
1)瞭解Http-only的作用及在Cookie中的存在方式
2)掌握通過設定Http-only防禦XSS攻擊
實驗環境
一臺Windows XP主機
主機部署實驗測試網站
主機安裝Fiddler軟體
實驗步驟
觸發XSS漏洞
在IE瀏覽器中訪問本實驗的測試網站: http://10.1.1.189/httponly-test/login.php
(注意,本實驗一定要在IE中瀏覽網頁,這是因為目前版本的IE沒有XSS過濾器,方便我們做實驗)
此時我們開啟fiddler工具抓包,返回瀏覽器,在登入框中輸入使用者ID:admin 和密碼:123456進行登入。登入後我們可以看到主介面:
在Fiddler中檢視剛剛用於登入的HTTP包,觀察響應頭的Cookie欄位(紅色框內),記錄下此時的cookie內容:
這裡的暱稱輸入框由於沒有對輸入字元進行過濾,存在XSS漏洞。我們在框中輸入“<script>alert(document.cookie);</script>”提交驗證,結果彈出如下提示,從而驗證了XSS漏洞的存在。(對於XSS不理解的讀者一定要首先掌握XSS基本知識)
在網站建設過程中,由於程式設計人員安全意識薄弱或工作疏忽,很容易出現如上所示的XSS漏洞。惡意攻擊者可以利用該種漏洞竊取使用者Cookie資訊,從而冒充使用者身份訪問網站。應對XSS攻擊,可以採用對輸入(輸出)文字進行特殊字元過濾的方式,但由於網站業務型別複雜多樣,且針對過濾也存在繞過方法,所以,僅僅通過過濾手段並不能完全解決XSS問題。Http-only的引入,就是從防止指令碼讀取Cookie的角度有效防禦了XSS漏洞的攻擊。