10.02.19 3291 Views 5

credit: ©Sergey Nivens (stock.adobe.com)

PHP Tutorial #24

Cross-Site-Scripting mit htmlentities abwehren

Da die Besucher einer Website über Formulare aber Daten senden können, sind sie Einfallstore für Hackerangriffe. Es ist darum sehr wichtig, die Formulare sicher zu entwerfen und vor Angriffen zu schützen. Denn diese Angriffe sind ohne Schutzmaßnahmen einfacher durchzuführen, als man glaubt!

Download als eBook

Kurzerklärung mit Beispiel:

  • Cross-Site-Scripting (XSS) wird mit der PHP-Funktion htmlentities bekämpft.
$eingabe = htmlentities($_POST['eingabe'], ENT_QUOTES);

    Inhaltsverzeichnis

  1. Das Problem: XSS-Scripting
  2. Die Lösung: htmlentities

Das Problem: Cross-Site-Scripting (XSS)

Eine große Gefahr, wenn Sie Formulare mit Benutzereingaben auf einer Website ermöglichen, besteht im Cross-Site-Scripting (XSS).

Worum geht es? Bei XSS-Attacken versucht der Hacker, fremden Code (oftmals: JavaScript) auf die Website einzuschleusen.

Ohne Schutz vor XSS-Angriffen, benutzt der Angreifen einfach eines Ihrer Eingabefelder und jagt den Code rein, der auch gleich ausgeführt wird.

Der folgende Quelltext zeigt ein einfaches HTML-Eingabeformular, das vollkommen ungeschützt ist:

<html><head></head><body>

<h1>Namen eingeben</h1>

<form action="sicherheit.php" method="post">
    <input name="eingabe">
    <input type="submit" name="submit">
</form>

<?php

if(isset($_POST["submit"])){

    $eingabe = $_POST["eingabe"];
    echo $eingabe;

}
?>

</body></html>                                

Wird in das Eingabefeld (input name="eingabe") anstatt des Namens etwa folgender Code eingegeben:

<script>
   window.location="https://falconbyte.net";
</script>                

Dann wird dieser Code auf der Seite ausgeführt (hier: leitet auf eine andere URL um - das kann sehr übel ausgehen und ist nur ein Beispiel für die Möglichkeiten eines Angriffs!).

Die Lösung: htmlentities

Die PHP-Funktion htmlentities wandelt alle Sonderzeichen wie < und > in HTML-Codes (Entities) um. Damit kann JavaScript nicht mehr ausgeführt werden. Wenn wir zusätlich auch einfache Anführungszeichen ' in HTML entities umwandeln wollen, tragen wir als zweites Argument der Funktion den Wert ENT_QUOTES ein:

<?php
    if(isset($_POST["submit"])){
        $eingabe = htmlentities($_POST['eingabe'], ENT_QUOTES);
    }
?>

Der ins Eingabefeld getippte JavaScript-Code wird dann folgendermaßen erkannt und als harmloser String behandelt (die Sonderzeichen sind umgewandelt:):

&lt;script&gt; window.location=&quot;https://falconbyte.net&quot; &lt;/script&gt;

Damit kann einer, der Euch Böses will, in Eure Web-Formulare eingeben, was er will: Es wird als harmloser String gewertet.

Man muss dazu sagen, dass alle modernen Browser heute einen eingebauten Schutz vor XSS-Attacken haben. Google-Chrome etwa erkennt Script-Code in Formularfeldern. Der eingebaute XSS-Auditor blockiert dann die Ausführung ("Chrome hat auf dieser Seite ungewöhnlichen Code erfasst und diese Seite daher blockiert").

Trotzdem: Wenn Sie sich darauf nicht verlassen und die Sicherheit der Website selbst in die Hand nehmen wollen, sollten Sie die PHP-Funktion htmlentities verwenden.

Java lernen

text text

PHP Lernen

zur PHP

JavaScript lernen

move nove move

FALCONBYTE.NET

Handmade with 🖤️

© 2018-2023 Stefan E. Heller

Impressum | Datenschutz | Changelog

Falconbyte Youtube Falconbyte GitHub facebook programmieren lernen twitter programmieren lernen discord programmieren lernen