Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Cross-Site Scripting, algemeen bekend als XSS, is een van de gevaarlijkste aanvalsmethoden die worden gebruikt door cybercriminelen, dus het is essentieel dat elke ontwikkelaar en beveiligingsonderzoeker weet wat het is en hoe aanslagen voorkomen. Dus, hoe kunt u actie ondernemen tegen de XSS-kwetsbaarheid? U gebruikt HTML, JavaScript of DOM om de gegevens weer te geven die een website van de gebruiker ontvangt. Een of meer van deze drie verschillende gebieden kunnen samenwerken.

XSS voorkomen met HTML

Met XSS kunnen aanvallers kwaadaardige codes injecteren of scripts in webpagina's, gericht op nietsvermoedende gebruikers die de site bezoeken. Dit kan persoonlijke gegevens stelen, bezoekers omleiden naar een andere site die door de cybercrimineel is opgezet of op een andere manier knoeien met het uiterlijk van de webpagina. Maar u kunt dit voorkomen; bijvoorbeeld door te voorkomen dat ze HTML invoegen.

Stel je hebt een website met een gastenboek. Laten we zeggen dat uw bezoekers die dit gastenboek gebruiken hun naam en berichten hier kunnen schrijven en dat hun berichten openbaar kunnen worden bekeken. Een aanvaller die een XSS-test in uw gastenboek wil maken, gebruikt het gebied dat u hebt toegewezen om een ​​bericht te schrijven. Die cybercrimineel zal hier een JavaScript-code uitvoeren. Een aanvaller kan bijvoorbeeld JavaScript-code gebruiken zoals:

<script>alarm ("De XSS!")</script>

De aanvaller moet hiervoor een scripttag gebruiken om dit te laten slagen. Als dat niet het geval is, werkt de JavaScript-code niet. U moet de

XSS voorkomen met JavaScript

De logica in HTML is dat ook geldig in javascript. In sommige toepassingen is het mogelijk om de gegevens die de website van de gebruiker ontvangt met een JavaScript-code af te drukken.

Beschouw deze codering:

<p id="afdrukken"></P>
<script>
document.getElementById("test").innerHTML = "";
</script>

Stel je voor dat een website een codeblok zoals hierboven gebruikt. De ontwikkelaar gebruikte hier een "p"-tag met de naam "print". Zoals je aan de code kunt zien, komt er een waarde uit de "zoek"-parameter, en de ontwikkelaar wil deze inkomende waarde weergeven in de "p"-tag. De ontwikkelaar die deze bewerking heeft uitgevoerd, wilde de innerHTML-functie van JavaScript gebruiken.

Laten we nu eens kijken naar de situatie vanuit het standpunt van de cyberaanvaller. In dat geval voert de aanvaller een XSS-test uit binnen de "script"-tag. Hiervoor hoeft de aanvaller de tag niet opnieuw op te starten, omdat er al een "script"-tag wordt gebruikt. De aanvaller kan dan een test als deze schrijven:

bestandsnaam.php? zoeken=a" alarm ("De XSS!"); f= "

Deze code verschijnt op de website als:

document.getElementById("test").innerHTML = " A" alarm ("De XSS!"); f="";

Die aanval zou slagen. Laten we, om het probleem beter te begrijpen, nog een voorbeeldtechniek bekijken die een aanvaller zou kunnen gebruiken. De hacker heeft mogelijk een XSS-test toegepast zoals:

bestandsnaam.php? zoeken=";</script><em>Fatih</em>

Dit is hoe het eruit zou zien vanaf de website:

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

Dit lijkt misschien een beetje vreemd omdat de aanvaller de eerste "script"-tag heeft gesloten door hier een structuur als "/script" te gebruiken. En dus kan de aanvaller elke gewenste JavaScript- en HTML-code opnieuw opstarten.

Als je nadenkt over deze twee verschillende voorbeelden, lijkt bescherming tegen XSS vrij eenvoudig. De noodzakelijke voorzorgsmaatregel zou zijn om de " En ' tekens die u in het eerste voorbeeld ziet. Codeer in het tweede voorbeeld de tekens < En >.

XSS voorkomen met DOM

In deze variant van XSS kunnen de gegevens die de website van de gebruiker ontvangt, interfereren met de eigenschap van een DOM-element. De kleurinformatie die de site van de gebruiker ontvangt, kan bijvoorbeeld de achtergrondkleur van een tabel of de volledige achtergrond van de pagina beïnvloeden. Dus de gebruiker bemoeit zich onbewust met de stijllay-outs van het lichaam en de tafel. De volgende code is hier een goed voorbeeld van:

<body bgcolor="<?php echo $_GET['kleur']; ?>"/>

Hierbij gebruikt de website de parameter "color" die rechtstreeks van de gebruiker is ontvangen in de eigenschap "bgcolor" van het element "body". Dus wat kan een aanvaller op dit punt doen? Ze kunnen deze kwaadaardige code uitvoeren:

bestandsnaam.php? kleur=rood" onload="alarm ('De XSS!')

Dit ziet er als volgt uit vanaf de website bekeken:

<body bgcolor=" rood" onload="alarm ('De XSS!') "/>

Om dit te voorkomen, zou de ontwikkelaar het " karakter.

Er is echter nog een belangrijk element in JavaScript om op te merken. Het volgende codefragment is hier een voorbeeld van:

<een href="javascript: waarschuwing('De XSS!')">

Dit betekent dat het mogelijk is om bepaalde JavaScript-code rechtstreeks uit te voeren. Een van de beste preventieve maatregelen is ervoor te zorgen dat de website controleert of de gegevens die hij van gebruikers ontvangt een echte URL is. De eenvoudigste methode is ervoor te zorgen dat er uitdrukkingen zijn zoals "HTTP" en "HTTPS" (de beveiligde versie van HTTP) in de verbinding.

Een voorbeeldfunctie om XSS te voorkomen met PHP

U hebt enkele voorbeelden gezien van hoe u een app of website kunt beschermen tegen XSS-aanvallen. U kunt de codefragmenten in deze tabel gebruiken met PHP:

Coderen in HTML

htmlspecialchars($str, ENT_COMPAT)

Coderen in JavaScript en DOM-attribuut

htmlspecialchars($str, ENT_NOQUOTES)

URL-controle

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

Houd er rekening mee dat dit slechts voorbeelden zijn en kunnen variëren afhankelijk van de softwaretaal die u gebruikt.

Jij kan maak een webapplicatie met PHP en probeer de codes die je hierboven ziet om ze uit te sms'en. Als je je afvraagt ​​hoe je al deze methoden kunt gebruiken, kun je wat ideeën opdoen uit het PHP-codeblok hieronder, wat handig zou moeten zijn, zelfs als je een andere taal gebruikt:

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

functiein_kenmerk($str){
opbrengst htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT zal het dubbele aanhalingsteken ("") coderen.
}

functiein_html($str){
$koppeling = '/^(((https?)|(\/\/))).*/';
als(!preg_match($link, $str))
{
opbrengst "/";
}
opbrengst $str;
}

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

Bescherm uw website tegen XSS en meer

XSS is een populaire aanvalsvector die door hackers wordt gebruikt. Gewoonlijk kan een padwaarde in de URL, elk veld op uw website waar gegevens kunnen worden ingevoerd (zoals formulieren en commentaarvelden), worden gebruikt om te testen op een XSS-kwetsbaarheid. Maar natuurlijk zijn er veel verschillende methoden die cybercriminelen kunnen gebruiken om een ​​site aan te vallen, vooral als u een website heeft die veel gebruikers heeft en hun informatie verbergt.