2013-04-27 51 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