2008-08-31 20 views
78

¿Cómo puedo configurar las cookies en mi PHP apps como HttpOnly cookies?¿Cómo se configura el uso de cookies HttpOnly en PHP

+0

http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies Tiene la información de soporte del navegador – Kzqai

+2

@Tchalvak No, las respuestas actuales aún son válidas No ha cambiado nada desde 2008 con respecto a la configuración de cookies solo HTTP en PHP. _Lo que los navegadores admiten cookies HTTP-only_ es diferente pregunta, con una respuesta diferente. – lanzz

+0

Puede usar '$ cookie-> setHttpOnly (true);' con https://github.com/delight-im/PHP-Cookie – caw

Respuesta

75
  • Para cookies, ver esta respuesta.
  • Por propia cookie de sesión de PHP (PHPSESSID, por defecto), ver @richie's answer

Los setcookie() y setrawcookie() funciones, introducido el parámetro httponly, de vuelta en la edad oscura de PHP 5.2.0, haciendo de este agradable y fácil. Basta con establecer el séptimo parámetro en true, según la sintaxis

Sintaxis de la función simplificada por razones de brevedad

setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly) 
setrawcookie($name, $value, $expire, $path, $domain, $secure, $httponly) 

Introduzca NULL de parámetros que desea permanecer como predeterminados. Es posible que también desee considerar si debe establecer el parámetro secure.

También es posible el uso de los mayores, de nivel inferior header() función:

header("Set-Cookie: name=value; httpOnly"); 
5

Explicación aquí desde Ilia ... 5.2 solamente a través de

httpOnly cookie flag support in PHP 5.2

Como se indica en ese artículo, se puede establecer el encabezado de sí mismo en las versiones anteriores de PHP

header("Set-Cookie: hidden=value; httpOnly"); 
4
<?php 
//None HttpOnly cookie: 
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie: 
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?> 

Source

5

Puede especificar en la función de conjunto de cookies see the php manual

setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE); 
13

Tenga en cuenta que no se detiene HttpOnly cross-site scripting; en cambio, neutraliza un posible ataque, y actualmente lo hace solo en IE (Firefox expone las cookies HttpOnly en XmlHttpRequest, y Safari no lo respeta en absoluto). Por supuesto, active HttpOnly, pero no pierda ni una hora de filtrado de salida y pruebas de fuzz en el comercio.

+12

Esta situación puede haber cambiado desde '08, ahora. Aquí hay una lista más actualizada/actualizada: http://stackoverflow.com/questions/528405/which-browsers-do-support-httponly-cookies – Kzqai

+0

Tengo muchas ganas de quitar mi voto negativo. –

9

Tenga en cuenta que las cookies de sesión PHP no usan httponly de forma predeterminada.

de hacerlo:

$sess_name = session_name(); 
if (session_start()) { 
    setcookie($sess_name, session_id(), null, '/', null, null, true); 
} 

Un par de elementos de la nota aquí:

  • Tienes que llamar session_name() antes session_start()
  • Esto también establece la ruta predeterminada a '/ ', que es necesario para Opera pero que PHP cookies de sesión no lo hacen de forma predeterminada tampoco.
+11

http://php.net/manual/en/function.session-set-cookie-params.php Se puede hacer automáticamente a través de la función PHP anterior en lugar de la codificación personalizada. – Ryaner

87

Para propias cookies de sesión de PHP en Apache:
Agregar a su configuración de Apache o .htaccess

<IfModule php5_module> 
    php_flag session.cookie_httponly on 
</IfModule> 

Esto también se puede ajustar dentro de un script, con tal de que se llama antes de session_start().

ini_set('session.cookie_httponly', 1); 
+9

+1, ya que esto es bueno (por seguridad) para tener en su servidor completo pero en su lugar se agregó al 'php.ini'. –

+8

Tenga en cuenta que php_flag se debe utilizar en su lugar: "No use php_value para establecer valores booleanos. Php_flag se debe usar en su lugar". http://php.net/manual/en/configuration.changes.php –

+0

@OndrejMachulda El cambio de 'php_value' a' php_flag' no funciona. Acabo de probarlo en mi servidor .. – Nate

3

Puede usar esto en un archivo de encabezado.

// setup session enviroment 
ini_set('session.cookie_httponly',1); 
ini_set('session.use_only_cookies',1); 

De esta forma todas las futuras cookies utilizarán httponly.

+0

Just FYI session.use_only_cookies está activado por defecto en PHP> 5.3 –

+0

y es correcto "todas las ** cookies ** de sesión ** futuras" usarán httponly, no las personalizadas ... – qdev

1

La sintaxis correcta del comando php_flag es

php_flag session.cookie_httponly On 

Y tener en cuenta, simplemente primera respuesta desde el servidor instalar la cookie y aquí (por ejemplo, Se puede ver la directiva "HttpOnly". Así que para las pruebas de eliminar cookies desde el navegador después de cada solicitud de prueba.

Cuestiones relacionadas