淺談HTTP Cookie 的 Secure 和 HTTPONLY屬性


  最近工作中遇到了關於cookie的secure及httponly屬性的問題,所以關注並學習了一段時間,這里做一下簡要記錄。關於secure和httponly標志的用途可以參考wikipedia.

  起因:系統PHP升級(5.1.7->5.4.5)並要求在下個升級后更新/etc/php.ini下的兩個變量,設定值為1.

  Session.cookie_secure=1

  Session.cookie_httponly=1

  由此引發了這次調查,調查的內容涉及到了php自身cookie函數、開源框架CodeIgniter、Javascript以及JQuery對這兩個屬性的支持情況。

  1、創建Cookie

  PHP:5.2之前只支持secure,5.2之后添加了對httponly的支持

bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] );

      CodeIgniter:在當前最新的2.1.2中只添加了對secure的支持,可是在github的CI開源項目上我發現了在下一個版本里httponly將會被添加進去。

function set_cookie($name = '', $value = '',$expire = '', $domain = '', $path = '/', $prefix = '', $secure = FALSE)

     Javascript: 從這兩個屬性的作用就可以推測出,js對secure的支持是沒問題的,可是httponly本就是為限制js而產生的,當然httponly的cookie也不會被js創建

document.cookie = "username=" +escape("leon") + "; expires=15/02/2013 00:00:00; path=/;domain=www.example.com; secure";

    Jquery: 作為js的框架,情況和js類似。

$.cookie('the_cookie', 'the_value', { expires: 7,path: '/', domain: 'x.com', secure: true });

    綜上可知,httponly參數只可以在服務器端設置,即通過PHP的setcookie()方法設置。所以如需添加這個屬性,項目里所有對cookie的set操作都應拿到服務端進行。

 

  httponly參數是用來限制非HTTP協議程序接口對客戶端COOKIE進行訪問的,所以客戶端腳本,如JS是無法取得這種COOKIE的,同時,JQuery中的“$.cookie('xxx')”方法也無法正常工作,所以想要在客戶端取到httponly的COOKIE的唯一方法就是使用AJAX,將取COOKIE的操作放到服務端,接收客戶端發送的ajax請求后將取值結果通過HTTP返回客戶端。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM