Moin!
Wieder so eine Frage, wo ich jahrelang stöbern könnte...
Wieder so eine Idee, wo man jahrelang die Sicherheitslücken am abdichten wäre...
Gibt es eine php-Funktion, die so ähnlich arbeitet wie htmlspecialchars() oder htmlentities() - nur andersrum? Also nicht html_entity_decode()! Ich brauche Umlaute codiert (ü => ü) aber html-Tags sollen unangetastet bleiben! Am Besten noch Anführungszeichen escaped.
Ich habe vor User-Input direkt in eine .php schreiben zu lassen (Übersetzung) was dann direkt über include() eingebunden wird. Allerdings kommen da immer wieder auch mal html-Tags vor!
Wenn HTML-Tags unangetastet bleiben, dann doch sicher auch sowas hier:
Hallo <b>Welt</b><?php call_world_domination(); ?>
Und damit hast du dann verloren.
Selbst mit HTML allein hast du verloren, mit XSS und CSRF kann man genug Schaden anrichten.
Im Moment habe ich htmlentities(); am Wickel, aber das entschärft mir aber auch alle verbauten html-Tags... :( Die hätte ich allerdings gerne im echo-fähigen Format!
Nach dem Prinzip:User Input:
Ich hätte gerne eine <font size="3">korrekte</font> Kodierung!
==> per _POST ==> $Array[] ==> foreach ==> fputs(sprache.php);Output in der php-Datei:
Ich hätte gerne eine <font size="3">korrekte</font> Kodierung!
Die Kodierung muss aber sowieso korrekt sein. Ich verstehe dein Ansinnen nicht.
Das Eingabeformular des HTML schickt die Daten in einer Kodierung. Diese muss bekannt sein und bei htmlentities() berücksichtigt werden, ansonsten kommt Müll raus.
Man kann das an dieser Stelle aber auch weglassen, und hat bei der Ausgabe einfach dieselbe Kodierung. Funktioniert auch.
Nur mindestens zwei Dinge sind böse: 1. PHP Code Include, und 2. Userdefiniertes HTML mit beliebiger Javascript-Einbindung.
Output auf der Website:
Ich hätte gerne eine korrekte Kodierung!
Wobei "korrekte" eben html-mäßig fontsize 3 hat...Gibt es sowas schon in php implementiert, oder muß ich das von Hand selber bauen?
Wenn du das Risiko grundsätzlich tragen willst: Es gibt nur genau eine Library, die dir dein HTML saubermacht: HTMLPurifier. Es gibt mehr Libarys, die das versuchen, aber daran scheitern. Offensichtlich ist das ein sehr schwieriges Unterfangen. Siehe z.B. diesen Vergleich: http://blog.astrumfutura.com/2010/08/html-sanitisation-the-devils-in-the-details-and-the-vulnerabilities/
Das Ausführen von PHP zu unterlassen wäre hingegen sehr simpel: Nimm einfach kein include() und kein require(). Diese Funktionen sind sowieso überflüssig, weil du ja nur HTML in den Dateien hast. Du musst also den darin nicht enthaltenen PHP-Code auch nicht ausführen.
readfile() wäre die einfache Alternative. Oder eine Kombination aus file_get_contents() und echo.
Aber ich hätte da jetzt echt Angst um deine Website.
- Sven Rautenberg