Cross-site scripting
Cross-site scripting (XSS) is een benaming voor een type bedreiging voor de beveiliging van computers die in webapplicaties kunnen voorkomen. Het zelfde bron principe zegt dat een script van de ene bron niet de pagina en gegevens, zoals cookies, van een andere bron mag lezen of wijzigen. Wanneer een aanvaller het zelfde bron principe voor HTML-scripting probeert te omzeilen spreekt men van cross-site scripting.
In het begin werd de acroniem CSS gebruikt om cross-site scripting aan te duiden. Om verwarring te voorkomen met Cascading Style Sheets en Content-scrambling system, die ook beide het acroniem CSS hebben, werd spoedig de afkorting XSS gebruikt waarbij de X staat voor cross (kruis).
Types
Er zijn ruwweg drie verschillende soorten XSS aanvallen. Bij het eerste soort XSS aanval wordt in een client-side script de invoer van de gebruiker gebruikt, bijvoorbeeld informatie uit de URL, om een stuk van de pagina te genereren, zonder deze informatie te controleren of te beveiligen. Bij het tweede soort aanvallen wordt de invoer van de gebruiker naar de server gestuurd en daar wordt de invoer zonder gecontroleerd of beveiligd te worden gebruikt om een HTML pagina te genereren. Hetzelfde gebeurt bij het derde type, alleen dan wordt de informatie in een database opgeslagen en dan gebruikt bij het genereren van HTML-pagina's voor meerdere personen. Dit laatste kan bijvoorbeeld gebeuren wanneer de tekst die wordt ingevoerd op bijvoorbeeld een discussieforum niet gecontroleerd wordt.
PHP voorbeeld
Een voorbeeld van een kwetsbaar php formulier:
<form method="post" action="xss.php">
Uw naam: <input id="naam" name="naam" type="text" value="
<?php $PrefillNaam = "";
if($_POST['naam'] != "")
{
echo $_POST['naam'];
}
?> ">
<input type="submit" value="Ok"/> </form>
het probleem had kunnen worden voorkomen door de functie htmlencode() te gebruiken.