2012-05-09 13 views
11

Me gustaría saber cómo configurar cookies como HTTPOnly en Codeigniter. Revisé la documentación y no vi cómo configurar esta bandera.configuración de cookies con indicadores HTTPOnly en codeigniter

También estaba buscando para establecer el indicador seguro para las galletas y lo encontraron en el archivo config.php:

$config['cookie_secure'] = TRUE; 

Pero no era una opción HTTPOnly en config.php.

¿Cómo configuro todas las cookies en HTTPOnly? Y si se hace en el marco, sería útil saber dónde está ese código para mi propio aprendizaje (y cuál es el valor predeterminado).

Respuesta

23

Por suerte se puede ver el código fuente de Session.php en GitHub

En función de _set_cookie verá:

// Set the cookie 
setcookie(
    $this->sess_cookie_name, 
    $cookie_data, 
    $expire, 
    $this->cookie_path, 
    $this->cookie_domain, 
    $this->cookie_secure, 
    $this->cookie_httponly 
); 

El valor de $this->cookie_httponly se asigna en __construct y el valor predeterminado es FALSE, pero se puede configurar como TRUE a través config.php de la siguiente manera:

$config['cookie_httponly'] = TRUE; 

Esto ENABL Tus cookies en el marco serán HTTPOnly.

+0

Gracias por esto. Aceptado y votado Qué bueno que pregunté. – chowwy

+2

Esto ya no funciona en la versión 2.1.3 como se menciona en el comentario a continuación. – ethicalhack3r

3

2.1.3 no contiene cookie_httponly en el foreach por lo que no lo configurará.

foreach (array('sess_encrypt_cookie', 'sess_use_database', 'sess_table_name', 'sess_expiration', 'sess_expire_on_close', 'sess_match_ip', 'sess_match_useragent', 'sess_cookie_name', 'cookie_path', 'cookie_domain', 'cookie_secure', 'sess_time_to_update', 'time_reference', 'cookie_prefix', 'encryption_key') as $key) 

también que no se pone aquí ...

setcookie(
       $this->sess_cookie_name, 
       $cookie_data, 
       $expire, 
       $this->cookie_path, 
       $this->cookie_domain, 
       $this->cookie_secure 
      ); 
+0

Puedo confirmar esto en mis pruebas, ¿sabes cómo se puede configurar? – ethicalhack3r

+0

Entonces, ¿cómo se puede hacer ahora? –

8

me encontré con que su es una drwaback en sesión de MGMT CodeIgniter porque

-

  1. 2,1 .3 versión no es una bandera cookie_httponly.
    Solución:
    Paso 1: Es necesario crear propia My_session.php en la biblioteca y se extienden archivo de sesión del sistema o modificar session.php (en Sistema-> biblioteca-> archivo session.php)
    Paso 2: encontrar _set_cookie ($ cookie_data = NULL) la función, ir a setcookie() y modificar como

    setcookie( $this->sess_cookie_name, $cookie_data, $expire,
    $this->cookie_path, $this->cookie_domain, $this->cookie_secure, TRUE ); // add True flag.

  2. a pesar de que si va a agregar "TRUE" y si la prueba con la herramienta de OWASP ZAP,
    algún tiempo que daré que csrf cuestiones
    es decir: HTTPONLY no es verdadero,
    El indicador seguro no está habilitado.

    Motivo: Desde que sess_destroy están configurando el indicador HTTPONLY y seguro en ninguno.
    solución: Actualizar la función sess_destroy en session.php como

    // Kill the cookie 
    `setcookie(
          $this->sess_cookie_name, 
         addslashes(serialize(array())), 
         ($this->now - 31500000), 
         $this->cookie_path, 
         $this->cookie_domain, 
         TRUE, 
         TRUE 
        );` 
    

Dado que estos temas me dieron noches de insomnio por lo que espero que esto le ayudará también. :)

Cuestiones relacionadas