SlideShare a Scribd company logo
1 of 39
Download to read offline
Cookies och
Websockets
   31:a januari 2011
Daniel Stenberg
●
    Free Software
●
    Network hacker
●
    Embedded developer
●
    Consultant


    Email:     daniel@haxx.se
    Twitter:   @bagder
    Web:       daniel.haxx.se
    Blog:      daniel.haxx.se/blog
att snacka om
●
    och vad vet jag då
●
    IETF
●
    HTTP
●
    cookies
●
    Websockets
Frågor?
●
    avbryt!
●
    kommentera!
●
    påpeka!
nät och protokoll
●
    skapade curl och är maintainer
●
    leder projekten c­ares och libssh2
●
    deltar inom IETFs arbetsgrupper 
    bland annat HTTPbis, ftpext2, 
    httpstate och hybi
IETF
●   “löst sammansatt organisation som 
    arrangerar diskussioner och 
    överenskommelser om den teknik som skall 
    användas på Internet” (Wikipedia)
●   “rough consensus and running code”
●   grundades 1986
●   RFCer
HTTP
HTTPbis
●   startade 2007
●   uppdaterar RFC2616, tar in errata, tar 
    bort saker saker som inte funkar eller 
    aldrig använts
●
    hitta inte på något nytt! det är 
    fortfarande HTTP 1.1
●   klargör svåra avsnitt
●   2010 lades HTTP authentication till
Cookies
http­state
●
    inspirerat av HTTPbis­gruppens 
    jobb
●
    dokumentera hur cookies 
    används
●
    Existerande specar obsoletas
●
    överväg nyheter som kommit 
    utanför specar
historia
●
    Uppfanns av Lou Montulli (Lynx 
    och sedan Netscape) i början av 
    90­talet
●
    (även blink­taggen!)
Netscape­”specen”
●
    1994
●
    stora luckor
●
    inte HTTP­mässigt
●
    problem med charset
●
    klantig datum/expire­hantering
●
    domain­attribut med problem
Efter Netscape­specen




     Andra följde efter
RFC 2109, första försöket
●
    1997
●
    baserat på Netscapes format
●
    Max­Age= istället för expires
●
    Version=1
●
    Comment=comment
RFC 2109




Ingen implementerade
RFC2965, andra försöket
●
    år 2000
●
    ersätter RFC2109
●
    Set­Cookie2:
●
    Discard
●
    Port=
RFC 2965




Ingen implementerade
Nu ­ det tredje försöket
●   Baserat på Netscape­specen
●   Lägg till Max­Age och HTTPonly
●   Browser­vendors ombord
●   Inkluderar saker som ordningssortering, hur man 
    parsar datum och hur långa cookies får vara.
●   Har inte löst TLD­domain­problemet
●   Hur gör de flesta?
●   Testa
●   Dokumentera
RFC xxxx




Kommer det att funka nu?
Cookie RFC på riktigt
●
    Därför att det inte är något nytt
●
    Därför att alla redan nästan gör 
    såhär
●
    Därför att form+cookie auth är 
    en dominerande login­teknik på 
    webben
WebSockets
Bidirektionell eller server­
          initierad HTTP
●
    Traditionellt löst med long­polling 
    eller AJAX
●
    WHATWGs arbete med HTML5 
    introducerade konceptet
●
    WHATWG lämnade över 
    protokoll­delen till IETF i mars 2009 
●
    Det där med server­initierad...
Passar bra i tiden
●
    Maj 2010
●
    November 2010
●
    Idag
Politiken kunde börja
●
    WHATWG är inte en standard­ 
    organisation
●
    IETF är väldigt annorlunda än 
    WHATWG
●
    En bestämmer vs konsensus
●
    Browser­vendors­klubb vs alla 
    som vill vara med
Requirement document
●
    Vad ska Hybi / WebSockets 
    egentligen klara av?
●
    Dokumentet har aldrig blivit till 
    något som används
●
    WebSockets är ett meddelande­
    baserat protokoll för bidirektionell 
    trafik över TCP
API + protokoll
●
    WebSockets är att javascript­API 
    enligt HTML5
●
    WebSockets är ett TCP­baserat 
    protokoll
Diskussionspunkter
●   text och/eller binärt
●   HTTP compliance
●   längd­fält eller start­stop
●   fixed­length längd­fält eller variabelt
●   storlek på fixed­length fält
●   hur hantera extensions
●   hur undvika cross­protocol attacker
●   HTTP upgrade, CONNECT eller annat
●   egen port eller port 80 / 443
●   Masking eller inte
●   Vilken sorts masking: XOR, HMAC eller AES 
Webbläsare
●
    Chrome och Safari skeppar ­00
●
    Firefox och Opera disablade pga 
    säkerhet
●
    IE är inte med på tåget
●
    Alla vill se WebSockets skeppat
­04 + spekulationer
HTTP handskakning
OPTIONS /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 4




HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
HTTP handskakning
OPTIONS /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 4




HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
HTTP handskakning
OPTIONS /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 4




HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
HTTP handskakning
OPTIONS /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 4




HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
WebSockets frames
  0                   1                   2                    3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|R| Payload len |     Extended payload length     |
|I|S|S|S| (4) |S|        (7)     |              (16/63)           |
|N|V|V|V|        |V|             |   (if payload len==126/127)    |
| |1|2|3|        |4|             |                                |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
|      Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
|                                |          Extension data        |
+-------------------------------+ - - - - - - - - - - - - - - - +
:                                                                 :
+---------------------------------------------------------------+
:                        Application data                         :
+---------------------------------------------------------------+


●
    små storlekar == litet längdfält
Client masking
●
    The client MUST mask all frames 
    sent to the server.
●
    Omaskerat från servern
●
    Syftet är att undvika cross­
    protocol attacker och cache­
    poisoning
Maskering == XOR
    32 bit nyckel

       längd




    XORad data
Websockets kommer
●
    Alla vill se Websockets hända
●
    ­76/­00 ­problemen kanske var 
    bra!
●
    Starka viljor
●
    Till sommaren 2011? Hösten?
Summering
●
    Cookie RFC inom kort
●
    Websockets lite längre bort
Tack för mig!

More Related Content

Similar to Cookies och Websockets

Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Per Åström
 
Välj rätt i teknikdjungeln
Välj rätt i teknikdjungeln Välj rätt i teknikdjungeln
Välj rätt i teknikdjungeln Creuna Sverige
 
Webboptimering 25 min
Webboptimering 25 minWebboptimering 25 min
Webboptimering 25 minFredrik Wendt
 
Foss-sthlm inbyggd opensource
Foss-sthlm inbyggd opensourceFoss-sthlm inbyggd opensource
Foss-sthlm inbyggd opensourceDaniel Stenberg
 
Hur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-serverHur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-serverMichael Boman
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältarPer Åström
 
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverkVälj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverkCreuna Sverige
 
HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationAnton Tibblin
 
TLS, lite status från #MeraKrypto
TLS, lite status från #MeraKryptoTLS, lite status från #MeraKrypto
TLS, lite status från #MeraKryptopawal
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleAnton Tibblin
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonAnton Tibblin
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appAnton Tibblin
 
BigData med logganalys
BigData med logganalysBigData med logganalys
BigData med logganalysFindwise
 
Alfresco administration stockholm meetup
Alfresco administration stockholm meetupAlfresco administration stockholm meetup
Alfresco administration stockholm meetupCarl Nordenfelt
 
PHP och MySQL
PHP och MySQLPHP och MySQL
PHP och MySQLbjornh
 
Nyheter Visual Studio 2010
Nyheter Visual Studio 2010Nyheter Visual Studio 2010
Nyheter Visual Studio 2010aljapaco
 

Similar to Cookies och Websockets (20)

Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)Varje resa börjar med ett litet steg (internetdagarna 2011)
Varje resa börjar med ett litet steg (internetdagarna 2011)
 
Välj rätt i teknikdjungeln
Välj rätt i teknikdjungeln Välj rätt i teknikdjungeln
Välj rätt i teknikdjungeln
 
Webboptimering 25 min
Webboptimering 25 minWebboptimering 25 min
Webboptimering 25 min
 
OPTIMERA STHLM! Henrik Nordström
OPTIMERA STHLM! Henrik NordströmOPTIMERA STHLM! Henrik Nordström
OPTIMERA STHLM! Henrik Nordström
 
Foss-sthlm inbyggd opensource
Foss-sthlm inbyggd opensourceFoss-sthlm inbyggd opensource
Foss-sthlm inbyggd opensource
 
Hur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-serverHur man kan testa sin HTTPS-server
Hur man kan testa sin HTTPS-server
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältar
 
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverkVälj rätt i teknikdjungeln - Del 1: CMS och webbramverk
Välj rätt i teknikdjungeln - Del 1: CMS och webbramverk
 
HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - Webbapplikation
 
Opera
OperaOpera
Opera
 
TLS, lite status från #MeraKrypto
TLS, lite status från #MeraKryptoTLS, lite status från #MeraKrypto
TLS, lite status från #MeraKrypto
 
OPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! LoadimpactOPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! Loadimpact
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottle
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med Python
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web app
 
BigData med logganalys
BigData med logganalysBigData med logganalys
BigData med logganalys
 
CV_2016
CV_2016CV_2016
CV_2016
 
Alfresco administration stockholm meetup
Alfresco administration stockholm meetupAlfresco administration stockholm meetup
Alfresco administration stockholm meetup
 
PHP och MySQL
PHP och MySQLPHP och MySQL
PHP och MySQL
 
Nyheter Visual Studio 2010
Nyheter Visual Studio 2010Nyheter Visual Studio 2010
Nyheter Visual Studio 2010
 

More from Daniel Stenberg

More from Daniel Stenberg (20)

mastering libcurl part 2
mastering libcurl part 2mastering libcurl part 2
mastering libcurl part 2
 
mastering libcurl part 1
mastering libcurl part 1mastering libcurl part 1
mastering libcurl part 1
 
curl - openfourm europe.pdf
curl - openfourm europe.pdfcurl - openfourm europe.pdf
curl - openfourm europe.pdf
 
curl experiments - curl up 2022
curl experiments - curl up 2022curl experiments - curl up 2022
curl experiments - curl up 2022
 
curl security - curl up 2022
curl security - curl up 2022curl security - curl up 2022
curl security - curl up 2022
 
HTTP/3 in curl - curl up 2022
HTTP/3 in curl - curl up 2022HTTP/3 in curl - curl up 2022
HTTP/3 in curl - curl up 2022
 
The state of curl 2022
The state of curl 2022The state of curl 2022
The state of curl 2022
 
Let me tell you about curl
Let me tell you about curlLet me tell you about curl
Let me tell you about curl
 
Curl with rust
Curl with rustCurl with rust
Curl with rust
 
Getting started with libcurl
Getting started with libcurlGetting started with libcurl
Getting started with libcurl
 
HTTP/3 is next generation HTTP
HTTP/3 is next generation HTTPHTTP/3 is next generation HTTP
HTTP/3 is next generation HTTP
 
Landing code in curl
Landing code in curlLanding code in curl
Landing code in curl
 
Testing curl for security
Testing curl for securityTesting curl for security
Testing curl for security
 
common mistakes when using libcurl
common mistakes when using libcurlcommon mistakes when using libcurl
common mistakes when using libcurl
 
HTTP/3 in curl 2020
HTTP/3 in curl 2020HTTP/3 in curl 2020
HTTP/3 in curl 2020
 
The state of curl 2020
The state of curl 2020The state of curl 2020
The state of curl 2020
 
curl roadmap 2020
curl roadmap 2020curl roadmap 2020
curl roadmap 2020
 
curl better
curl bettercurl better
curl better
 
HTTP/3 for everyone
HTTP/3 for everyoneHTTP/3 for everyone
HTTP/3 for everyone
 
HTTP/3, QUIC and streaming
HTTP/3, QUIC and streamingHTTP/3, QUIC and streaming
HTTP/3, QUIC and streaming
 

Cookies och Websockets

  • 1. Cookies och Websockets 31:a januari 2011
  • 2. Daniel Stenberg ● Free Software ● Network hacker ● Embedded developer ● Consultant Email: daniel@haxx.se Twitter: @bagder Web: daniel.haxx.se Blog: daniel.haxx.se/blog
  • 3. att snacka om ● och vad vet jag då ● IETF ● HTTP ● cookies ● Websockets
  • 4. Frågor? ● avbryt! ● kommentera! ● påpeka!
  • 5. nät och protokoll ● skapade curl och är maintainer ● leder projekten c­ares och libssh2 ● deltar inom IETFs arbetsgrupper  bland annat HTTPbis, ftpext2,  httpstate och hybi
  • 6. IETF ● “löst sammansatt organisation som  arrangerar diskussioner och  överenskommelser om den teknik som skall  användas på Internet” (Wikipedia) ● “rough consensus and running code” ● grundades 1986 ● RFCer
  • 8. HTTPbis ● startade 2007 ● uppdaterar RFC2616, tar in errata, tar  bort saker saker som inte funkar eller  aldrig använts ● hitta inte på något nytt! det är  fortfarande HTTP 1.1 ● klargör svåra avsnitt ● 2010 lades HTTP authentication till
  • 10. http­state ● inspirerat av HTTPbis­gruppens  jobb ● dokumentera hur cookies  används ● Existerande specar obsoletas ● överväg nyheter som kommit  utanför specar
  • 11. historia ● Uppfanns av Lou Montulli (Lynx  och sedan Netscape) i början av  90­talet ● (även blink­taggen!)
  • 12. Netscape­”specen” ● 1994 ● stora luckor ● inte HTTP­mässigt ● problem med charset ● klantig datum/expire­hantering ● domain­attribut med problem
  • 13. Efter Netscape­specen Andra följde efter
  • 14. RFC 2109, första försöket ● 1997 ● baserat på Netscapes format ● Max­Age= istället för expires ● Version=1 ● Comment=comment
  • 16. RFC2965, andra försöket ● år 2000 ● ersätter RFC2109 ● Set­Cookie2: ● Discard ● Port=
  • 18. Nu ­ det tredje försöket ● Baserat på Netscape­specen ● Lägg till Max­Age och HTTPonly ● Browser­vendors ombord ● Inkluderar saker som ordningssortering, hur man  parsar datum och hur långa cookies får vara. ● Har inte löst TLD­domain­problemet ● Hur gör de flesta? ● Testa ● Dokumentera
  • 20. Cookie RFC på riktigt ● Därför att det inte är något nytt ● Därför att alla redan nästan gör  såhär ● Därför att form+cookie auth är  en dominerande login­teknik på  webben
  • 22. Bidirektionell eller server­ initierad HTTP ● Traditionellt löst med long­polling  eller AJAX ● WHATWGs arbete med HTML5  introducerade konceptet ● WHATWG lämnade över  protokoll­delen till IETF i mars 2009  ● Det där med server­initierad...
  • 23. Passar bra i tiden ● Maj 2010 ● November 2010 ● Idag
  • 24. Politiken kunde börja ● WHATWG är inte en standard­  organisation ● IETF är väldigt annorlunda än  WHATWG ● En bestämmer vs konsensus ● Browser­vendors­klubb vs alla  som vill vara med
  • 25. Requirement document ● Vad ska Hybi / WebSockets  egentligen klara av? ● Dokumentet har aldrig blivit till  något som används ● WebSockets är ett meddelande­ baserat protokoll för bidirektionell  trafik över TCP
  • 26. API + protokoll ● WebSockets är att javascript­API  enligt HTML5 ● WebSockets är ett TCP­baserat  protokoll
  • 27. Diskussionspunkter ● text och/eller binärt ● HTTP compliance ● längd­fält eller start­stop ● fixed­length längd­fält eller variabelt ● storlek på fixed­length fält ● hur hantera extensions ● hur undvika cross­protocol attacker ● HTTP upgrade, CONNECT eller annat ● egen port eller port 80 / 443 ● Masking eller inte ● Vilken sorts masking: XOR, HMAC eller AES 
  • 28. Webbläsare ● Chrome och Safari skeppar ­00 ● Firefox och Opera disablade pga  säkerhet ● IE är inte med på tåget ● Alla vill se WebSockets skeppat
  • 30. HTTP handskakning OPTIONS /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 4 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
  • 31. HTTP handskakning OPTIONS /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 4 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
  • 32. HTTP handskakning OPTIONS /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 4 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
  • 33. HTTP handskakning OPTIONS /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 4 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
  • 34. WebSockets frames 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-------+-+-------------+-------------------------------+ |F|R|R|R| opcode|R| Payload len | Extended payload length | |I|S|S|S| (4) |S| (7) | (16/63) | |N|V|V|V| |V| | (if payload len==126/127) | | |1|2|3| |4| | | +-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - + | Extended payload length continued, if payload len == 127 | + - - - - - - - - - - - - - - - +-------------------------------+ | | Extension data | +-------------------------------+ - - - - - - - - - - - - - - - + : : +---------------------------------------------------------------+ : Application data : +---------------------------------------------------------------+ ● små storlekar == litet längdfält
  • 35. Client masking ● The client MUST mask all frames  sent to the server. ● Omaskerat från servern ● Syftet är att undvika cross­ protocol attacker och cache­ poisoning
  • 36. Maskering == XOR 32 bit nyckel längd XORad data
  • 37. Websockets kommer ● Alla vill se Websockets hända ● ­76/­00 ­problemen kanske var  bra! ● Starka viljor ● Till sommaren 2011? Hösten?
  • 38. Summering ● Cookie RFC inom kort ● Websockets lite längre bort