Pregunta

¿Cómo puedo configurar las cookies en mi PHP apps como HttpOnly cookies?

¿Fue útil?

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()antes session_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); 

?>

Fuente

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top