Scriptorama.nl

Header image showing a keyboard, mouse, laptop and books on design patterns

Firefox 3 komt met HttpOnly-cookie ondersteuning

Het zal wel een beetje een koude dag in de hel zijn, maar de volgende versie van Firefox, Firefox 3.0, zal een feature bevatten die zijn oorsprong kent uit Microsoft Internet Explorer: HttpOnly cookies. Een HttpOnly cookie krijgt een flag mee welke de browser vertelt dat dit cookie niet uitgelezen mag worden door Javascript:

If Internet Explorer 6.0 SP1 (available in Microsoft Windows® XP SP1 and at the
Windows Update Site) detects a cookie marked HttpOnly and some client side
script code, such as JavaScript, attempts to read the cookie (document.cookie,
for example), Internet Explorer returns an empty string, thus preventing the
attack by preventing the malicious code in the XSS attack from sending the data
back to a malicious site. Of course, the cookie is passed to and from the
originating server as normal; the browser using script code just can't read it.
A cookie is set on the client with an HTTP response header. The following shows
the syntax used in this header:

Set-Cookie: <name>=<value>[; <name>=<value>]
[; expires=<date>][; domain=<domain_name>]
[; path=<some_path>][; secure][; HttpOnly]

Kortom, als een stuk Javascript een HttpOnly cookie probeert uit te lezen krijgt deze simpelweg een lege string terug. Door bijvoorbeeld session cookies als HttpOnly cookie te versturen zorg je er voor dat de impact van een mogelijk cross-site-scripting probleem binnen je site een stuk minder wordt -> de aanvaller kan met een HttpOnly session cookie nooit het sessie ID opvragen en daar vervolgens vervelende dingen mee te doen. Uiteraard is dit niet een oplossing voor cross-site-scripting maar meer een soort veiligheidsnet voor de keren dat het wel voorkomt.

PHP bevat sinds versie 5.2 ook ondersteuning voor HttpOnly cookies, doormiddel van het 7e (!) argument aan SetCookie():

PHP:
  1. setcookie ( string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly]]]]]] )

Tevens kun je met de setting session.cookie_httponly aangeven dat de session cookie ook als HttpOnly cookie verstuurd moet worden. Heb je nog geen PHP 5.2, dan kun je met een header() aanroep natuurlijk zelf een cookie zetten met de HttpOnly flag:

PHP:
  1. header("Set-Cookie: name=value; expires=0; path=/; HttpOnly");

Voor HttpOnly session cookies zul je echter moeten upgraden naar PHP 5.2

Reageer ook!

Zolang FireFox (en IE???) de enige is die dit ondersteunt heb je hier vrij weinig aan lijkt me.

"Het zal wel een beetje een koude dag in de hel zijn".

Wat betekend dat nu weer? :)
Wel mooi!

IE 6 (en 7) ondersteunen dit al. Combineer dit met Firefox en je hebt toch echt "de meeste gebruikers" te pakken. Opera en Safari negeren voorals nog deze flag.

En laat ik nu net Opera fan zijn. :-) [ vraag me niet waarom, hehe ]

Maargoed; als IE en FF dit ondersteunen gaat dat al de goede richting op; nu nog de rest van de horde.

Leave a comment
Line and paragraph breaks automatic, e-mail address never displayed, HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>