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