Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision. Läs mer.

Cross-Site Scripting, allmänt känt som XSS, är en av de farligaste attackmetoderna som används av cyberkriminella, så det är viktigt att varje utvecklare och säkerhetsforskare vet vad det är och hur man förhindra attacker. Så, hur kan du vidta åtgärder mot XSS-sårbarheten? Du använder HTML, JavaScript eller DOM för att visa data som en webbplats får från användaren. Ett eller flera av dessa tre olika områden kan samverka.

Hur man förhindrar XSS med HTML

XSS tillåter angripare att injicera skadliga koder eller skript till webbsidor, inriktade på intet ont anande användare som besöker webbplatsen. Detta kan stjäla personlig information, omdirigera besökare till en annan webbplats som skapats av cyberbrottslingen eller på annat sätt manipulera utseendet på webbsidan. Men du kan förhindra att detta händer; till exempel genom att stoppa dem från att infoga HTML.

Föreställ dig att du har en hemsida med en gästbok. Låt oss säga att dina besökare som använder den här gästboken kan skriva sina namn och meddelanden här, och deras meddelanden kan ses offentligt. En angripare som vill göra ett XSS-test i din gästbok kommer att använda det område du har tilldelat för att ett meddelande ska skrivas. Den cyberbrottslingen kommer att köra en JavaScript-kod här. Till exempel kan en angripare använda JavaScript-kod som:

<manus>varna("XSS!")</script>

Angriparen måste använda en skripttagg för att detta ska lyckas. Om de inte gör det kommer JavaScript-koden inte att fungera. Du måste koda

Hur man förhindrar XSS med JavaScript

Logiken i HTML är också giltig i JavaScript. I vissa applikationer är det möjligt att skriva ut data som webbplatsen tar emot från användaren med en JavaScript-kod.

Tänk på denna kodning:

<p id="skriva ut"></s>
<manus>
document.getElementById("testa").innerHTML = "";
</script>

Föreställ dig att en webbplats använder ett kodblock som det ovan. Utvecklaren använde en "p"-tagg som heter "print" här. Som du kan se av koden kommer ett värde från "search"-parametern, och utvecklaren vill visa detta inkommande värde i "p"-taggen. Utvecklaren som gjorde den här operationen ville använda innerHTML-funktionen i JavaScript.

Låt oss nu titta på situationen från cyberattackarens synvinkel. I ett sådant fall kommer angriparen att utföra ett XSS-test inom "script"-taggen. För detta behöver angriparen inte starta om taggen, eftersom en "script"-tagg som redan används. Angriparen kunde sedan skriva ett test så här:

filnamn.php? sök=a" varna("XSS!"); f= "

Denna kod kommer att visas på webbplatsen som:

document.getElementById("testa").innerHTML = " a" varna("XSS!"); f="";

Den attacken skulle bli framgångsrik. För att bättre förstå problemet, låt oss undersöka ytterligare ett exempel på teknik som en angripare kan använda. Hackaren kan ha tillämpat ett XSS-test som:

filnamn.php? sök=";</script><em>Fatih</em>

Så här skulle det se ut från webbplatsen:

document.getElementById("testa").innerHTML = "";</script><em>Fatih</em>";

Detta kan verka lite konstigt eftersom angriparen har stängt den första "script"-taggen genom att använda en struktur som "/script" här. Och så kan angriparen starta om vilken JavaScript- och HTML-kod som helst.

Om du tänker på dessa två olika exempel verkar det ganska enkelt att skydda mot XSS. Den nödvändiga försiktighetsåtgärden skulle vara att koda " och ' tecken du ser i det första exemplet. I det andra exemplet kodar du tecknen < och >.

Hur man förhindrar XSS med DOM

I denna variant av XSS kan data som webbplatsen tar emot från användaren störa egenskapen för ett DOM-element. Till exempel kan färginformationen som webbplatsen får från användaren påverka bakgrundsfärgen på en tabell eller hela bakgrunden på sidan. Så användaren stör omedvetet stillayouterna för kroppen och bordet. Följande kod är ett bra exempel på detta:

<kropp bgcolor="<?php echo $_GET['Färg']; ?>"/>

Med detta använder webbplatsen parametern "color" som tas emot från användaren direkt i "bgcolor"-egenskapen för elementet "body". Så vad kan en angripare göra vid det här laget? De kan köra denna skadliga kod:

filnamn.php? färg=röd" onload="varna('XSS!')

Så här ser det ut från hemsidan:

<kropp bgcolor=" röd" onload="varna('XSS!') "/>

För att förhindra att detta händer måste utvecklaren koda " karaktär.

Det finns dock ytterligare ett viktigt element i JavaScript att notera. Följande kodavsnitt är ett exempel på detta:

<a href="javascript: alert('XSS!')">

Detta innebär att det är möjligt att köra viss JavaScript-kod direkt. En av de bästa förebyggande åtgärderna är att se till att webbplatsen kontrollerar om data den tar emot från användare är en riktig URL. Den enklaste metoden är att se till att det finns uttryck som "HTTP" och "HTTPS" (den säkra versionen av HTTP) i sambandet.

En exempelfunktion för att förhindra XSS med PHP

Du har sett några exempel på hur man skyddar en app eller webbplats från XSS-attacker. Du kan använda kodavsnitten i den här tabellen med PHP:

Koda i HTML

htmlspecialchars($str, ENT_COMPAT)

Koda i JavaScript och DOM-attribut

htmlspecialchars($str, ENT_NOQUOTES)

URL-kontroll

'/^(((https?)|(\/\/))).*/';

Observera att detta bara är exempel och kommer att variera beroende på vilket programspråk du använder.

Du kan skapa en webbapplikation med PHP och prova koderna du ser ovan för att skicka ut dem. Om du undrar hur du använder alla dessa metoder kan du få några idéer från PHP-kodblocket nedan, vilket borde vara användbart även om du använder ett annat språk:

<?php
$data = $_GET['data'];

fungerain_attribute($str){
lämna tillbaka htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT kommer att koda dubbla citattecken (").
}

fungerain_html($str){
$länk = '/^(((https?)|(\/\/))).*/';
om(!preg_match($link, $str))
{
lämna tillbaka "/";
}
lämna tillbaka $str;
}

$data = in_attribute($data);
$data = in_html($data);
$data = real_url (data);
?>

Skydda din webbplats från XSS och mer

XSS är en populär attackvektor som används av hackare. Vanligtvis kan ett sökvägsvärde i URL: en, vilket som helst fält på din webbplats där data kan anges (som formulär och kommentarsfält), användas för att testa en XSS-sårbarhet. Men självklart finns det många olika metoder cyberbrottslingar kan använda för att attackera en webbplats, speciellt om du har en webbplats som har många användare och döljer deras information.