PHP Creare cookie HTTPOnly

ago 4th, 2009 | Filed under JavaScript, PHP, Snippet

Link sponsorizzati

Allora, innanzitutto spiegamo a cosa possono servire i cookie HTTPOnly. Come molti di voi sanno, esistono tecniche di hacking che, sfruttando ad esempio le XSS, possono permettere di grabbare (rubare) i cookie. Ora, i cokkie per un sito sono importanti, specialmente se usati per registrare le sessioni di login. Ora, è possibile evitare questo problema creando dei cookie HTTPOnly. Cosa sono i cookie HTTPOnly?
Niete di particolare, sono dei normalissimi cookie, che però, a differenza di quelli ‘normali’, non sono accessibili tramite i linguaggi client side come il JavaScript. Per fare un esempio, creando un cookie HTTPOnly e facendo un alert con document.cookie, non si ottiene praticamente nulla.

Ora, vediamo come creare un cookie HTTPOnly attraverso un php, con due esempi normali, uno con cookie ‘classico’ e uno con cookie HTTPOnly.

<?php
setcookie("cookie", "test");
echo "<script>alert(document.cookie)";
?>

Questo è il cookie classico, eseguendo questo codice vi viene mostrato un alert con scritto cookie=test. A dimostrazione del fatto che questo cookie è accessibile da JavaScript.

Link sponsorizzati

<?php
setcookie("cookie", "test", NULL, NULL, NULL, NULL, TRUE);
echo "<script>alert(document.cookie)";
?>

Questo è lo stesso codice di prima, soltanto che ora il cookie è HTTPOnly e che quindi l’alert mostrato sarà completamente vuoto (ricordatevi di eliminare tutti i cookie precedenti prima di fare la prova). La funzione setcookie funziona così

bool setcookie ( string $name [, string $value [, int $expire= 0 [, string $path [, string $domain [, bool $secure= false [, bool $httponly= false ]]]]]] )

A noi serviva che l’ultimo parametro fosse a true e quindi abbiamo usato quella sintassi, passando a null tutti gli altri valori.

Ora, la stessa cosa vale per le sessioni, come sapete, quando in php si inizializza una sessione, il server memorizza su un cookie l’id di sessione che gli serve poi per recuperare i dati. Anche l’id di sessione può essere grabbato e quindi bisogna prestare attenzione, anche in questo caso si può settare questo cookie ad HTTPOnly ed evitare problemi di vario genere. Come prima vediamo due semplici esempi, uno che mostra che il cookie è accessibile al JavaScript e uno no.

<?php
session_start();
echo "<script>alert(document.cookie)";
?>

Eseguendo questo esempio ci verrà mostrato un alternet con l’id di sessione generato, una cosa del tipo PHPSESSID= ecc ecc.
Ora, anche in questo caso, è possibile nascondere questo cookie al JavaScript per renderlo inaccessibile.

<?php
session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
session_start();
echo "<script>alert(document.cookie)";
?>

Questa volta l’alert mostrato sarà vuoto (ricordatevi sempre di eliminare i cookie prima di fare le prove).
La funzione session_set_cookie_params funziona così

void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure= false [, bool $httponly= false ]]]] )

Come vedete, anche in questo caso, settiamo l’ultimo parametro a true per dire che il cookie è HTTPOnly. Lo zero del primo parametro indica che la sessione scade quando ‘si chiude il browser’.

Link sponsorizzati

Condividi l'articolo

Post correlati:

  1. Geek
    ago 12th, 2009 at 21:57

    Complimenti per il Blog pieno di consigli e snippet interessanti :D

  2. codesnippet
    ago 12th, 2009 at 22:02

    Grazie per i complimenti!