IE javascript cookies violates RFC2109/2965?

Pagina: 1
Acties:

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:43

crisp

Devver

Pixelated

Topicstarter
Volgens mij is er wat mis met de implementatie van javascript cookies in IE wanneer geen expliciet domein wordt aangegeven, dus zoiets:
JavaScript:
1
2
3
4
function SetCookie(sName, sValue)
{
    document.cookie = sName + '=' + escape(sValue) + '; expires=Fri, 31 Dec 2099 23:59:59 GMT; path=/';
}


Dit gebruiken wij zowel op de frontpage als hier op het forum. Nu blijkt dat dergelijke cookies geset op de frontpage ook gewoon uitleesbaar zijn hier op het forum (subdomein), maar enkel in Internet Explorer.

Volgens mij is dat een violation van RFC2965 omdat een cookie geset zonder expliciet domain geset wordt op request-host zonder leading dot. Een cookie op onze frontpage zou dus geset worden op domain 'tweakers.net'. Als je dan vervolgens hier naar het forum gaat dan blijkt in bijvoorbeeld Firefox die cookie niet uitleesbaar te zijn maar in IE wel, dit terwijl 'tweakers.net' toch niet domain-matched tegenover 'gathering.tweakers.net'.

Als ik op de frontpage de cookie een expliciet domain opgeef in de vorm van '.tweakers.net' (note de leading dot) dan is de cookie zowel in IE als in Firefox uitleesbaar op het forum, hetgeen ook correct is want '.tweakers.net' domain-matched wel met 'gathering.tweakers.net'.

Ik heb overigens al uitgesloten dat het aan de document.domain='tweakers.net' ligt die wij hier op het forum gebruiken voor cross-subdomein scripting.

Uiteraard geeft dit applicatie-problemen in het geval dat op de frontpage dezelfde cookie-names worden gebruikt. IE geeft cookies terug in document.cookie op chronologische volgorde, maar een cookie initieel geset op 'tweakers.net' is niet te overschrijven door de javascript op 'gathering.tweakers.net' (dat genereerd een nieuwe cookie), en aangezien je verder niet weet van welk domein een cookie afkomstig is via document.cookie is hier vrij weinig aan te doen.

Daarnaast vraag ik mij af of dit niet een serieuse security-issue is (ook al valt het binnen hetzelfde domein), en of dit al niet bekend is (ik kon zo gauw niets vinden eigenlijk).

Intentionally left blank


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:43

crisp

Devver

Pixelated

Topicstarter
Het lijkt een generiek probleem binnen IE; cookies worden niet opgeslagen met leading dot, dus de matching is sowieso broken.

Overigens grappig om te zien hoe hosting providers hiermee omgaan; xs4all set bijvoorbeeld cookies op .xs4all.nl waardoor mijn cookies exposed worden als ik bijvoorbeeld naar http://balusc.xs4all.nl ga

[ Voor 58% gewijzigd door crisp op 16-09-2006 02:06 ]

Intentionally left blank


  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

Over welke IE versie hebben we het nu? Als dit er namelijk in IE6 al in zat, is het een lichtelijke schande dat dat er nu nog in zit.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:43

crisp

Devver

Pixelated

Topicstarter
Voor zover ik heb kunnen testen doen zowel IE6 en IE7 (rc1) het fout; ze maken geen onderscheid tussen cookies met expliciet of impliciet domain-parameter. Zowel Firefox als Opera doen het wel goed.
Dit is niet alleen van toepassing op cookies geset door javascript, maar cookies in het algemeen.

In short:
HTTP: http://tweakers.net
1
Set-Cookie: TestCookie=This+is+a+cookie+set+from+.tweakers.net; expires=Sun, 17 Sep 2006 11:31:28 GMT; path=/; domain=.tweakers.net

expliciet domain met leading dot; cookie moet meegezonden worden naar requests op subdomains van tweakers.net. Correct in alle browsers.

HTTP: http://tweakers.net
1
Set-Cookie: TestCookie=This+is+a+cookie+set+from+tweakers.net; expires=Sun, 17 Sep 2006 11:31:28 GMT; path=/; domain=tweakers.net

expliciet domain zonder leading dot; volgens RFC2965 moet de UA in zulke gevallen zelf een dot appenden en de cookie opslaan als ware het geserveerd met .tweakers.net als domain-parameter (dit is volgens mij een verschil met RFC2109). Correct in alle browsers.

HTTP: http://tweakers.net
1
Set-Cookie: TestCookie=This+is+a+cookie+set+from+tweakers.net+without+domain+parameter; expires=Sun, 17 Sep 2006 11:31:28 GMT; path=/

Geen expliciet domain; cookie moet opgeslagen worden op domain 'tweakers.net' (dus zonder leading dot) en mag niet meegezonden worden naar subdomains van tweakers.net. Correct in Firefox en Opera, incorrect in IE.

edit: gemeld op connect als private issue, ben benieuwd of ik er feedback op krijg...

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Je hebt gelijk wat beterft RFC 2109, maar niet wat betreft 2965. De laatste beschrijft Set-Cookie2, niet Set-Cookie. Ik heb nog geen real-life implementatie gezien van RFC 2965 voor zover ik me kan herinneren.

Ik quote daarom even RFC 2109:
Hosts names can be specified either as an IP address or a FQHN
string. Sometimes we compare one host name with another. Host A's
name domain-matches host B's if

• both host names are IP addresses and their host name strings match
exactly; or

• both host names are FQDN strings and their host name strings match
exactly; or

• A is a FQDN string and has the form NB, where N is a non-empty name
string, B has the form .B', and B' is a FQDN string. (So, x.y.com
domain-matches .y.com but not y.com.)

Note that domain-match is not a commutative operation: a.b.c.com
domain-matches .c.com, but not the reverse.
Kortom, een cookie voor tweakers.net mag nooit bekend worden bij gathering.tweakers.net.
Domain=domain
Optional. The Domain attribute specifies the domain for which the
cookie is valid. An explicitly specified domain must always start
with a dot.
Ofwel: als je een domein opgeeft, moet dat met een . beginnen, dus zou dat .tweakers.net of .gathering.tweakers.net moeten zijn.
Domain Defaults to the request-host. (Note that there is no dot at
the beginning of request-host.)
Dus tweakers.net en niet .tweakers.net als de domein niet is opgegeven.

Tel alles bij elkaar op, en je moet tot de conclusie komen dat een cookie die wordt geset op tweakers.net waarbij géén domein is opgegeven, nóóit bekend mag worden bij gathering.tweakers.net.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:43

crisp

Devver

Pixelated

Topicstarter
Verwijderd schreef op zondag 17 september 2006 @ 13:43:

Tel alles bij elkaar op, en je moet tot de conclusie komen dat een cookie die wordt geset op tweakers.net waarbij géén domein is opgegeven, nóóit bekend mag worden bij gathering.tweakers.net.
Inderdaad, dus een bug in IE's implementatie. Maar volgens mij wijkt RFC2965 daar ook niet van af dus maakt het an sich niet uit welke je aanhoudt op dat punt. Vwb Set-Cookie heb je gelijk en is RFC2109 de juiste specificatie om naar te kijken.

Hmmz, mijn 2 voorbeeld (expliciet domein zonder leading dot) zou volgens RFC2109 gereject moeten worden:
To prevent possible security or privacy violations, a user agent
rejects a cookie (shall not store its information) if any of the
following is true:

* The value for the Domain attribute contains no embedded dots or
does not start with a dot.
Zou het kunnen zijn dat IE's cookie-implementatie nog gebaseerd is op de zwaar verouderde Netscape draft?

[ Voor 42% gewijzigd door crisp op 17-09-2006 16:27 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Dat zou heel goed kunnen:
Specifying the domain name, using the pattern "domain=<domain_name>", is optional for persistent cookies and is used to indicate the end of the domain for which the cookie is valid. Session cookies that specify a domain are rejected. If the specified domain name ending matches the request, the cookie tries to match the path to determine if the cookie should be sent. For example, if the domain name ending is .microsoft.com, requests to home.microsoft.com and support.microsoft.com would be checked to see if the specified pattern matches the request. The domain name must have at least two or three periods in it to prevent cookies from being set for widely used domain name endings, such as .com, .edu, and co.jp. Allowable domain names would be similar to .microsoft.com, .someschool.edu, and .someserver.co.jp. Only hosts within the specified domain can set a cookie for a domain.
Ik gokte dat IE dus maar een . voor het domein toevoegt als dit nog niet expliciet was aangegeven, om maar aan die minstens 2 dots te komen, maar dat is niet zo, want ook bij meerdere dots gaat het nog mis.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:43

crisp

Devver

Pixelated

Topicstarter
MS refereert zelf toch veel aan RFC2109, voornamelijk waar het gaat om cookie-limits.
De 2/3 dots-rule is echter toch echt iets dat stamt uit de Netscape cookie draft; het vereist ook dat de client weet wat de top-level domains zijn. Als IE dat echt zo zou doen dan hadden we toch wel problemen gezien bij de introductie van nieuwe top-level domains zoals .eu?

[ Voor 36% gewijzigd door crisp op 17-09-2006 18:15 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:43

crisp

Devver

Pixelated

Topicstarter
Ik heb hierover contact gehad met Eric Lawrence van Microsoft en die wist mij te vertellen dat IE's State Management Mechanism inderdaad nog gebaseerd is op de oude Netscape Cookie draft en niet op RFC2109.
RFC2109 bevat echter nog wel wat hiaten die RFC2965 deels probeert op te lossen, maar ook RFC2965 schijnt niet perfect te zijn.
MS is er in ieder geval wel mee bezig :)

Intentionally left blank

Pagina: 1