Scriptorama.nl

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

httpOnly cookie in PHP

Via deze blogpost van Ilia komen we te weten dat PHP 5.2 een nieuwe feature krijgt. Om in de toekomst cross-site scripting (XSS) aanvallen te verminderen is de httpOnly flag in het leven geroepen. Dit betekent dat cookies niet zomaar via scripttalen als Javascript uitgelezen kunnen worden.

De httpOnly feature blijkt een uitvinding te zijn van Microsoft, zoals hier te lezen valt. De browser moet wel deze feature ondersteunen. Via deze post komen te weten welke browsers het ondersteunen:

  • IE 6.0 SP1 and later - prevents reading, but not over-writing (still allows preset CSRF attacks)
  • IE 7.0 - prevents reading and writing - safest
  • Safari 1.3 and later - prevents reading
  • Opera 8 and later - prevents reading
  • Mozilla - not supported
  • Firefox - not supported
  • IE 5.x for Mac - will actually fail to render the page. Use browser detection to encourage them to migrate to Safari or Firefox once it supports HttpOnly

Wat onmiddelijk opvalt is dat Firefox hiervoor geen ondersteuning heeft. Daar moet natuurlijk verandering in komen!

Reageer ook!

Hoewel Firefox inderdaad geen "native" ondersteuning heeft voor HttpOnly cookies, bestaat er wel een manier om dit te realiseren. Dit wordt beschreven in dit blog artikel van Gervase Markham.

De truc is om de cookie functie in de HTMLDocument prototype te wijzigen, bijvoorbeeld met een GreaseMonkey script:

JAVASCRIPT:
  1. HTMLDocument.prototype.__defineGetter__("cookie",function (){return null;});

Spijtig genoeg blijkt de bug report om deze feature in Mozilla in te bouwen reeds te bestaan sinds eind 2002: https://bugzilla.mozilla.org/show_bug.cgi?id=178993

Dat is inderdaad heel jammer. Nu PHP dit gaat krijgen moet Firefox dit wel implementeren als 'true webdeveloper browser'.

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>