Sven Rautenberg: Hacken verhindern (erschweren)

Beitrag lesen

Moin!

Welche Zeichen muss man per Str_replace ersetzen, um das Hacken der eigenen Seite zB durch einen Gästebucheintrag zu verhindern? Reicht es nur die Zeichen < und > durch "ungefährlichere" zu ersetzen?

Kann Programmcode auch per Übergabewert

index.php?wert=<gefährlicher_code>

übergeben und versehntlich ausgeführt werden?
Was tut ihr dagegen?

Auf was du anspielst, nett sich Cross Site Scripting (kurz XSS), und es gibt ein recht einfaches Mittel dagegen: Kontextgerecht escapen.

Ich habe da gerade unlängst eine Klasse im Zend Framework 2 gesehen, die für die häufigsten Kontexte in einer Webseite Methoden anbietet: https://github.com/zendframework/zf2/blob/master/library/Zend/Escaper/Escaper.php

Wie man sieht: Es gibt Methoden für die Textausgabe in Javascript, in CSS, in URLs, und in HTML sowohl für den normalen Body-Bereich, als auch für Attributwerte.

Für die Ausgabe im HTML-Body reicht einfach die PHP-Funktion htmlspecialchars(), allerdings sollte man lieber auch das Encoding des Strings angeben, und außerdem das Flag ENT_QUOTES, damit auch einfache Anführungszeichen behandelt werden.

Das Escaping im URL-Kontext ist ebenfalls sehr simpel: rawurlencode().

Alles andere ist komplizierter. Pauschal kann man sagen: Alles, was nicht garantiert ein ungefährlich nutzbares Zeichen ist, wird von der Klasse in eine (meist hexadezimale) Ersatzform gebracht, die definitiv nicht als syntax-relevantes Zeichen wirken kann.

- Sven Rautenberg