HTML-Code filtern?

Miraculixx

Erfahrenes Mitglied
Hi!
Ich habe eine PHP-Seite, auf der in Textfeldern Text eingegeben wird. Auf einer anderen Seite wird das ganze dann wieder angezeigt. Nur wenn man html-code in eines der Textfelder eingibt, dann kann sich glaube ich jeder vorstellen, was dann mit der Ausgabe passiert.
Also sollte man wohl den html-code "herausfiltern". Muss man das händisch machen?
Also sollte man da einfach alle spitzklammern <> herauslöschen oder wie ist es am sinnvollsten?

Vielen Dank wie immer für eure schnelle Hilfe, Miraculixx
 
Ah vielen Dank, genau das habe ich gesucht! :)
Eine Frage hätte ich noch: Reicht es für den Normalen Anwender aus, die Funktion htmlspecialchars zu benutzen, oder würdest du eher htmlentities empfehlen?

Ahja und soll ich das machen, bevor ich die Werte in die Datenbank speichere, oder erst bevor ich die Werte auf der Seite anzeigen lasse?
 
Ich verwende immer htmlspecialchars(), reicht für gewöhnlich...
Ob Du die Daten vorher filterst oder nachher hängt von zwei Dingen ab:

1. Brauchst Du die HTML Formatierung möglicherweise nochmals? -> Dann speichern
2. Wenn Du die Formatierung garantiert nicht mehr brauchst, dann vorher raus damit (ansosnten geht das unnötig auf die Peformance beim Anzeigen der Daten).
 
OK, dann nehm ich die Dinger vorher raus, weil es soll eben gar kein HTML-Code eingegeben werden.

Vielen Dank für die Antwort! :)
 
Meiner Meinung nach sollte man Veränderungen an den Usereingaben immer erst bei der Ausgabe vornehmen. Du weißt nie, ob es nicht auch mal in einem anderen "Medium" (z.B. als Textexport oder gar PDF) erscheinen soll, dann müsstest Du alle &lt;, &gt;, etc., die Du mit [phpf]htmlspecialchars[/phpf] erzeugt hast, wieder zurückverwandeln. Macht der User "fehlerhafte" Eingaben, sollte man ihn darauf hinweisen und die Eingabe korrigieren lassen.

Gruß hpvw

PS: Dieses Forum bietet spezielle Tags, um auf das PHP-Handbuch zu verweisen: [ phpf ]PHP-Funktion[ /phpf ], natürlich ohne die Leerzeichen.
 
Dann hast Du aber ziemliches Sicherheits-Problem:

Angenommen das SQL Statement heißt:
Code:
' UPDATE `test` SET `name`=\''.$name.'\' WHERE ID=\'1\' '
wobei $name dem geposteten Value entspricht (textfeld).

Gibt der User nun in das Textfeld ein
Code:
"xxx' AND einfeld='5"
wars dass dann mit dem SQL Query, da der User quasi direkten Zugriff auf Deine Datenbank hat.

Liefert dann folgenden Query:
Code:
UPDATE `test` SET `name`='xxx' AND einfeld='5' WHERE ID=\'1\' '

D.h. er kann weitere Daten ohne Probleme nach belieben ändern...
 
@Mik3e:
War das zu meinem Post?
Das man, wie Marian sagt, mit [phpf]mysql_real_escape_string[/phpf] arbeiten sollte, wollte ich nicht aushebeln. Veränderungen an den Eingaben gegen SQL-Injection sollten natürlich gemacht werden, auch damit der Text so in der Datenbank landet, wie der User ihn getippt hat. Formatierungen und Zensur dagegen würde ich immer erst bei der Ausgabe machen.
Da war ich vielleicht etwas undeutlich in meinem letzten Post.

Gruß hpvw

Edit: Zu SQL-Injection: Eingabe sicherheitshalber in HTML konvertieren
(Ich bin trotzdem noch der Meinung, dass die Veränderung des HTML-Codes erst bei der Ausgabe gemacht werden sollte.)
 
Zuletzt bearbeitet:
Zurück