Cross-Site Scripting, almindeligt kendt som XSS, er en af de farligste angrebsmetoder, der anvendes af cyberkriminelle, så det er afgørende, at enhver udvikler og sikkerhedsforsker ved, hvad det er, og hvordan man forhindre angreb. Så hvordan kan du gribe ind over for XSS-sårbarheden? Du bruger HTML, JavaScript eller DOM til at vise de data, et websted modtager fra brugeren. Et eller flere af disse tre forskellige områder kan arbejde sammen.
Sådan forhindrer du XSS ved hjælp af HTML
XSS tillader angribere at injicere ondsindede koder eller scripts til websider, rettet mod intetanende brugere, der besøger webstedet. Dette kan stjæle personlige data, omdirigere besøgende til et andet websted, der er oprettet af den cyberkriminelle, eller på anden måde manipulere med udseendet af websiden. Men du kan forhindre dette i at ske; for eksempel ved at stoppe dem med at indsætte HTML.
Forestil dig, at du har en hjemmeside med en gæstebog. Lad os sige, at dine besøgende, der bruger denne gæstebog, kan skrive deres navne og beskeder her, og deres beskeder kan ses offentligt. En angriber, der ønsker at lave en XSS-test i din gæstebog, vil bruge det område, du har tildelt, til at skrive en besked. Den cyberkriminelle vil køre en JavaScript-kode her. For eksempel kan en angriber bruge JavaScript-kode som:
<manuskript>alert("XSS!")</script>
Angriberen skal bruge et script-tag for at dette lykkes. Hvis de ikke gør det, virker JavaScript-koden ikke. Du skal kode
Sådan forhindrer du XSS ved hjælp af JavaScript
Logikken i HTML er også gyldig i JavaScript. I nogle applikationer er det muligt at udskrive de data, som hjemmesiden modtager fra brugeren med en JavaScript-kode.
Overvej denne kodning:
<p id="Print"></s>
<manuskript>
document.getElementById("prøve").innerHTML = "";
</script>
Forestil dig, at et websted bruger en kodeblok som den ovenfor. Udvikleren brugte et "p" tag kaldet "print" her. Som du kan se af koden, vil en værdi komme fra "search" parameteren, og udvikleren ønsker at vise denne indgående værdi i "p" tagget. Udvikleren, der lavede denne handling, ønskede at bruge den indreHTML-funktion i JavaScript.
Lad os nu se på situationen fra cyberangriberens synspunkt. I et sådant tilfælde vil angriberen udføre en XSS-test i "script"-tagget. Til dette behøver angriberen ikke at genstarte tagget, fordi et "script" tag, der allerede er i brug. Angriberen kunne derefter skrive en test som denne:
filnavn.php? søg=a" alert("XSS!"); f= "
Denne kode vises på hjemmesiden som:
document.getElementById("prøve").innerHTML = " -en" alert("XSS!"); f="";
Det angreb ville være vellykket. For bedre at forstå problemet, lad os undersøge endnu et eksempel på teknik, som en angriber kunne bruge. Hackeren kan have anvendt en XSS-test såsom:
filnavn.php? søg=";</script><em>Fatih</em>
Sådan vil det se ud, når det ses fra hjemmesiden:
document.getElementById("prøve").innerHTML = "";</script><em>Fatih</em>";
Dette kan virke lidt mærkeligt, fordi angriberen har lukket det første "script"-tag ved at bruge en struktur som "/script" her. Og så kan angriberen genstarte enhver JavaScript- og HTML-kode, de ønsker.
Hvis du tænker på disse to forskellige eksempler, virker det ret simpelt at beskytte mod XSS. Den nødvendige forholdsregel ville være at kode " og ' tegn, du ser i det første eksempel. I det andet eksempel skal du indkode tegnene < og >.
Sådan forhindrer du XSS ved hjælp af DOM
I denne variant af XSS kan de data, som webstedet modtager fra brugeren, forstyrre egenskaben af et DOM-element. For eksempel kan de farveoplysninger, som webstedet modtager fra brugeren, påvirke baggrundsfarven på en tabel eller hele baggrunden på siden. Så brugeren forstyrrer uforvarende stillayouterne af kroppen og bordet. Følgende kode er et godt eksempel på dette:
<krop bgcolor="<?php echo $_GET['farve']; ?>"/>
Hermed bruger hjemmesiden parameteren "color" modtaget fra brugeren direkte i "bgcolor"-egenskaben for "body"-elementet. Så hvad kunne en angriber gøre på dette tidspunkt? De kunne udføre denne ondsindede kode:
filnavn.php? farve=rød" onload ="alert('XSS!')
Dette ser sådan ud, når det ses fra hjemmesiden:
<krop bgcolor=" rød" onload ="alert('XSS!') "/>
For at forhindre dette i at ske, skal udvikleren kode " Karakter.
Der er dog endnu et vigtigt element i JavaScript at bemærke. Følgende kodestykke er et eksempel på dette:
<a href="javascript: advarsel('XSS!')">
Det betyder, at det er muligt at køre noget JavaScript-kode direkte. En af de bedste forebyggende foranstaltninger er at sikre, at webstedet kontrollerer, om de data, det modtager fra brugere, er en rigtig URL. Den enkleste metode er at sikre, at der er udtryk som "HTTP" og "HTTPS" (den sikre version af HTTP) i forbindelsen.
En eksempelfunktion til at forhindre XSS med PHP
Du har set nogle eksempler på, hvordan man beskytter en app eller et websted mod XSS-angreb. Du kan bruge kodestykkerne i denne tabel med PHP:
Indkode i HTML |
htmlspecialchars($str, ENT_COMPAT) |
Indkode i JavaScript og DOM-attribut |
htmlspecialchars($str, ENT_NOQUOTES) |
URL kontrol |
'/^(((https?)|(\/\/))).*/'; |
Bemærk, at disse kun er eksempler og vil variere afhængigt af det softwaresprog, du bruger.
Du kan oprette en webapplikation med PHP og prøv de koder, du ser ovenfor, for at sende dem en sms. Hvis du undrer dig over, hvordan du bruger alle disse metoder, kan du få nogle ideer fra PHP-kodeblokken nedenfor, som burde være nyttige, selvom du bruger et andet sprog:
<?php
$data = $_GET['data'];fungerein_attribute($str){
Vend tilbage htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT vil kode det dobbelte anførselstegn ("").
}
fungerein_html($str){
$link = '/^(((https?)|(\/\/))).*/';
hvis(!preg_match($link, $str))
{
Vend tilbage "/";
}
Vend tilbage $str;
}
$data = in_attribute($data);
$data = in_html($data);
$data = real_url (data);
?>
Beskyt dit websted mod XSS og mere
XSS er en populær angrebsvektor, der bruges af hackere. Normalt kan en stiværdi i URL'en, ethvert felt på dit websted, hvor data kan indtastes (såsom formularer og kommentarfelter), bruges til at teste for en XSS-sårbarhed. Men der er selvfølgelig mange forskellige metoder cyberkriminelle kan bruge til at angribe et websted, især hvis du har en hjemmeside, der har mange brugere og skjuler deres oplysninger.