使用HttpOnly提公升Cookie安全性

2021-08-19 20:35:00 字數 2306 閱讀 5734

隨著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為:

把這個檔案放在自己的伺服器上,比如我們搭建的伺服器為: .

那麼構造xss語句:

當執行script成功時就會把cookie傳送到自己的伺服器下cookie.txt檔案中。xss攻擊是多麼可怕的事情。

說了這麼多,貌似還沒有提到httponly,這是哪般?莫及!這就到了!如何保障我們的cookie安全呢?cookie都是通過document物件獲取的,我們如果能讓cookie在瀏覽器中不可見就可以了,那httponly就是在設定cookie時接受這樣乙個引數,一旦被設定,在瀏覽器的document物件中就看不到cookie了。而瀏覽器在瀏覽網頁的時候不受任何影響,因為cookie會被放在瀏覽器頭中傳送出去(包括ajax的時候),應用程式也一般不會在js裡操作這些敏感cookie的,對於一些敏感的cookie我們採用httponly,對於一些需要在應用程式中用js操作的cookie我們就不予設定,這樣就保障了cookie資訊的安全也保證了應用。

給瀏覽器設定cookie的頭如下:

如果 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並不是萬能的。

使用HttpOnly提公升Cookie安全性

在介紹httponly之前,我想跟大家聊聊cookie及xss。隨著b s的普及,我們平時上網都是依賴於http協議完成,而http是無狀態的,即同乙個會話的連續兩個請求互相不了解,他們由最新例項化的環境進行解析,除了應用本身可能已經儲存在全域性物件中的所有資訊外,該環境不儲存與會話有關的任何資訊,...

利用Httponly提公升web應用程式安全性

隨著www服務的興起,越來越多的應用程式轉向了b s結構,這樣只需要乙個瀏覽器就可以訪問各種各樣的web服務,但是這樣也越來越導致了越來越多的web安全問題。www服務依賴於http協議實現,http是無狀態的協議,所以為了在各個會話之間傳遞資訊,就不可避免地用到cookie或者session等技術...

利用Httponly提公升應用程式安全性

隨著www服務的興起,越來越多的應用程式轉向了b s結構,這樣只需要乙個瀏覽器就可以訪問各種各樣的web服務,但是這樣也越來越導致了越來越多的web安全問題。www服務依賴於htpp協議實現,http是無狀態的協議,所以為了在各個會話之間傳遞資訊,就不可避免地用到cookie或者session等技術...