cookies och websockets
DESCRIPTION
Slides from my presentation at the OWASP Sweden event at January 31st 2011 in Stockholm.Slides in Swedish.TRANSCRIPT
Cookies ochWebsockets
31:a januari 2011
Daniel Stenberg
Email: [email protected]: @bagderWeb: daniel.haxx.seBlog: daniel.haxx.se/blog
● Free Software● Network hacker● Embedded developer● Consultant
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 cares 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
httpstate
● inspirerat av HTTPbisgruppens 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 90talet
● (även blinktaggen!)
Netscape”specen”
● 1994● stora luckor● inte HTTPmässigt● problem med charset● klantig datum/expirehantering● domainattribut med problem
Efter Netscapespecen
Andra följde efter
RFC 2109, första försöket
● 1997● baserat på Netscapes format● MaxAge= istället för expires● Version=1● Comment=comment
RFC 2109
Ingen implementerade
RFC2965, andra försöket
● år 2000● ersätter RFC2109● SetCookie2:● Discard● Port=
RFC 2965
Ingen implementerade
Nu det tredje försöket
● Baserat på Netscapespecen
● Lägg till MaxAge och HTTPonly
● Browservendors ombord
● Inkluderar saker som ordningssortering, hur man parsar datum och hur långa cookies får vara.
● Har inte löst TLDdomainproblemet
● 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 loginteknik på webben
WebSockets
Bidirektionell eller serverinitierad HTTP
● Traditionellt löst med longpolling eller AJAX
● WHATWGs arbete med HTML5 introducerade konceptet
● WHATWG lämnade över protokolldelen till IETF i mars 2009
● Det där med serverinitierad...
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● Browservendorsklubb 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 meddelandebaserat protokoll för bidirektionell trafik över TCP
API + protokoll
● WebSockets är att javascriptAPI enligt HTML5
● WebSockets är ett TCPbaserat protokoll
Diskussionspunkter
● text och/eller binärt
● HTTP compliance
● längdfält eller startstop
● fixedlength längdfält eller variabelt
● storlek på fixedlength fält
● hur hantera extensions
● hur undvika crossprotocol 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.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Sec-WebSocket-Origin: http://example.comSec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 4
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
HTTP handskakning
OPTIONS /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Sec-WebSocket-Origin: http://example.comSec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 4
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
HTTP handskakning
OPTIONS /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Sec-WebSocket-Origin: http://example.comSec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 4
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
HTTP handskakning
OPTIONS /chat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==Sec-WebSocket-Origin: http://example.comSec-WebSocket-Protocol: chat, superchatSec-WebSocket-Version: 4
HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: me89jWimTRKTWwrS3aRrL53YZSo=
WebSockets frames
● små storlekar == litet längdfält
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 : +---------------------------------------------------------------+
Client masking
● The client MUST mask all frames sent to the server.
● Omaskerat från servern● Syftet är att undvika cross
protocol attacker och cachepoisoning
Maskering == XOR32 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!