Pergunta

Como posso definir os cookies no meu PHP apps como HttpOnly cookies?

Foi útil?

Solução

  • Para seus biscoitos, veja esta resposta.
  • Para Cookie de sessão próprio do PHP (PHPSESSID, por padrão), consulte Resposta de @richie

O setcookie() e setrawcookie() funções, introduziu o httponly parâmetro, na era das trevas do PHP 5.2.0, tornando isso agradável e fácil.Basta definir o 7º parâmetro como verdadeiro, conforme a sintaxe

Sintaxe da função simplificada por questões de brevidade

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

Digitar NULL para parâmetros que você deseja manter como padrão.Você também pode considerar se deve definir o secure parâmetro.

Também é possível usar o antigo, de nível inferior header() função:

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

Outras dicas

Para cookies de sessão do próprio PHP no Apache:
adicione isso à sua configuração do Apache ou .htaccess

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

Isso também pode ser definido dentro de um script, desde que seja chamado antes session_start().

ini_set( 'session.cookie_httponly', 1 );

Esteja ciente de que o HttpOnly não interrompe o script entre sites;em vez disso, ele neutraliza um possível ataque e atualmente faz isso apenas no IE (o FireFox expõe cookies HttpOnly em XmlHttpRequest e o Safari não os respeita).Certamente, ative o HttpOnly, mas não perca nem uma hora de filtragem de saída e teste de fuzz em troca dele.

Observe que os cookies de sessão PHP não usam httponly por padrão.

Fazer isso:

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

Alguns itens dignos de nota aqui:

  • Você tem que ligar session_name()antes session_start()
  • Isso também define o caminho padrão para '/', necessário para a Opera, mas quais cookies de sessão PHP também não fazem por padrão.
<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

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

?>

Fonte

Explicação aqui da Ilia...5.2 apenas embora

Suporte ao sinalizador de cookie httpOnly no PHP 5.2

Conforme declarado naquele artigo, você mesmo pode definir o cabeçalho nas versões anteriores do PHP

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

Você pode especificá-lo na função set cookie veja o manual do php

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

Você pode usar isso em um arquivo de cabeçalho.

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

Desta forma, todos os cookies de sessão futuras usarão httponly.

  • Atualizada.

A sintaxe correta do comando php_flag é

php_flag  session.cookie_httponly On

E fique atento, basta a primeira resposta do servidor definir o cookie e aqui (por exemplo, você pode ver a diretiva "HttpOnly".Portanto, para testar, exclua os cookies do navegador após cada solicitação de teste.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top