2013-04-27 52 views
1

爲什麼我的cookies沒有加密?我看到他們爲純文本,我可以伊斯利編輯它們,因爲它是純文本:我使用了OCodeigniter Cookie加密

$config['sess_cookie_name']  = 'sess_id'; 
    $config['sess_expiration']  = 0; //24hours -> 8640 
    $config['sess_expire_on_close'] = TRUE; 
    $config['sess_encrypt_cookie'] = TRUE; 
    $config['sess_use_database'] = TRUE; 
    $config['sess_table_name']  = 'session'; 
    $config['sess_match_ip']  = FALSE; 
    $config['sess_match_useragent'] = TRUE; 
    $config['sess_time_to_update'] = 3000000000; 
$config['encryption_key'] = 'dfs78fh834fh83h4fhhsdifsihdfh99inf83kjwnefkjwenfknwkejnfowejnf82'; 

,並設置cookie的我用的鉤子,看起來像這樣:

function setUserCountry($country){ 

    $CI =& get_instance(); 
    $CI->input->set_cookie(
     array(
     'name'=>'user_country', 
     'value'=>str_replace(array('"',"'",">","<"),"",$country), 
     'expire'=>'8650000000', 
     'secure'=>TRUE 
     )); 
    } 

鉤被稱爲pre_controller:

$hook['pre_controller'] = //run my cookie hook setUserCountry() method 

,這是餅乾的外觀一旦創建:

enter image description here

+0

爲什麼要加密cookie值?如果它是敏感信息,它屬於會話。 – 2013-04-27 09:48:51

+0

會導致會話在瀏覽器關閉和cookies不到期時到期:P!? @Pekka웃 – sbaaaang 2013-04-27 09:51:40

+0

當瀏覽器關閉時,您可以使會話cookie不會過期,但這可能會成爲安全問題。但是,如果您需要在當前會話之外存儲數據,爲什麼不將其存儲在用戶記錄中? – 2013-04-27 09:56:03

回答

1

所以你正在給set_cookie()$ name參數提供一個數組,其中secure = true。

if ($secure == FALSE AND config_item('cookie_secure') != FALSE) 
     { 
      $secure = config_item('cookie_secure'); 
     } 

這段代碼在system/core/Input.php中會導致問題。因此,除非您關閉全局cookie加密或在數組中放棄$ secure,否則它應該可以工作。

編輯
Cookies not beeing set, codeigniter 正確地指出問題

你需要加載雖然該cookie幫手。此外,請改用post_controller_constructor掛鉤。 http://ellislab.com/codeigniter/user-guide/general/hooks.html

另外,使用這種方式不是更好嗎? http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY 並將您的cookies添加到擴展核心控制器。

+0

嗨,我tryed但問題仍然存在,令人難以置信:我真的不知道爲什麼發生,可能是因爲我不使用cookie助手,我使用輸入類來設置Cookie? :O – sbaaaang 2013-04-27 15:12:42

+0

編輯回答上面 – qwertzman 2013-04-28 15:21:45

+0

我所有嘗試過這些和一些這些解決方案已經在我的應用程序,問題依然存在,因爲Cookie創建但未加密:/ – sbaaaang 2013-04-28 15:37:37

4

對於加密的笨餅乾在

$config['sess_encrypt_cookie'] = FALSE; 

改變這一行

$config['sess_encrypt_cookie'] = TRUE; 

而且設置的密鑰在

使config.php文件修改
$config['encryption_key'] = ""; 
+3

值得注意的是,你不應該依賴於存儲敏感數據與客戶端,甚至加密。您只需將會話ID(或更長的使用期限,用戶標識和校驗和)存儲在cookie中,並將敏感信息保存在數據庫的自己控制下(再次加密),就更安全。使用SSL可以緩解這個問題,但它仍然不是一個理想的解決方案。此外,Cookies可以被清除,這可能會造成問題 – Basic 2013-04-27 10:09:19

+0

@ user2326544嘿跆拳道你是對的,但我已經使用它$ config ['sess_encrypt_cookie'] \t = TRUE;所以現在的問題是理解爲什麼它不加密他們:O,我編輯我的答案謝謝 – sbaaaang 2013-04-27 10:29:41