¿Cómo se configura el uso de cookies HttpOnly en PHP?
Pregunta
¿Cómo puedo configurar las cookies en mi PHP apps
como HttpOnly cookies
?
Solución
- Para tus galletas, mira esta respuesta.
- Para Cookie de sesión propia de PHP (
PHPSESSID
, por defecto), consulte La respuesta de @richie
El setcookie()
y setrawcookie()
funciones, introdujo el httponly
parámetro, allá por la época oscura de PHP 5.2.0, lo que lo hace agradable y fácil.Simplemente establezca el séptimo parámetro en verdadero, según la sintaxis
Sintaxis de funciones simplificada para mayor brevedad
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Ingresar NULL
para los parámetros que desea permanecer como predeterminados.También es posible que desees considerar si deberías configurar el secure
parámetro.
También es posible utilizar la versión más antigua y de nivel inferior. header()
función:
header( "Set-Cookie: name=value; httpOnly" );
Otros consejos
Para las cookies de sesión propias de PHP en Apache:
agregue esto a su configuración de Apache o .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Esto también se puede configurar dentro de un script, siempre que se llame antes session_start()
.
ini_set( 'session.cookie_httponly', 1 );
Tenga en cuenta que HttpOnly no detiene las secuencias de comandos entre sitios;en cambio, neutraliza un posible ataque y actualmente lo hace solo en IE (FireFox expone las cookies HttpOnly en XmlHttpRequest y Safari no las respeta en absoluto).Por supuesto, active HttpOnly, pero no pierda ni una hora de filtrado de salida y pruebas de fuzz a cambio de ello.
Tenga en cuenta que las cookies de sesión PHP no utilizan httponly
por defecto.
Para hacer eso:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Un par de elementos a tener en cuenta aquí:
- tienes que llamar
session_name()
antessession_start()
- Esto también establece la ruta predeterminada a '/', que es necesaria para Opera, pero que las cookies de sesión de PHP tampoco hacen de manera predeterminada.
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
Explicación aquí de Ilia...5.2 solo aunque
httpSolo admite el indicador de cookies en PHP 5.2
Como se indica en ese artículo, puedes configurar el encabezado tú mismo en versiones anteriores de PHP.
header("Set-Cookie: hidden=value; httpOnly");
Puedes especificarlo en la función configurar cookies. ver el manual de php
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
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 manera, todas las cookies de sesiones futuras utilizarán solo http.
- Actualizado.
La sintaxis correcta del comando php_flag es
php_flag session.cookie_httponly On
Y tenga en cuenta que la primera respuesta del servidor configura la cookie y aquí (por ejemplo, puede ver la directiva "HttpOnly").Entonces, para realizar pruebas, elimine las cookies del navegador después de cada solicitud de prueba.