• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Problem mit Textausgabe

Tomm

Mitglied
Ich hab eine Art Gästebuch, in das man was eintragen kann, es funktioniert auch alles einwandfrei.
Der Text wird mit einem Formular in eine Datenbank eingetragen
Das Problem ist nur, wenn jemand einen HTML-CODE ins Gästebuch einträgt, dann wird dieser HTML-CODE beim Anzeigen des Eintrags ausgeführt und eine Fehlermeldung erscheint.
Normalerweise sollte das nie passieren, trotzdem wollte ich mal fragen , was man dagegen tun kann
Ich hab das nur zufällig entdeckt, als ich mal eine HTML-Seite kopiert habe und ins Gästebuch zu Testzwecken eingetragen hab
 
Dazu solltest du eigentlich vor dem Eintragen in die Datenbank den Eintrag mit der PHP-Funktion strip_tags() von HTML-Tags befreien lassen. HTML zuzulassen ist ein schwerer Sicherheitsmangel, da so eventuell bösartige Scripts oder fremde Inhalte von anderen Websites ausgeführt werden könnten.

Außerdem solltest du spezielle Zeichen maskieren mit htmlentities().
 
Ich habs nochmal getestet
Es werden nicht nur HTML-Codes, sondern auch SQL-Anweisungen ausgeführt , bei der Ausgabe des Textes

z.B. falls jemand "SELECT Text FROM ....." eintragen sollte, dann gibts auch ne Fehlermeldung

htmlentities() hab ich schon benutzt
 
Grobe Faustregel:

- Alle Benutzereingaben (vor allem GET/POST-Variablen) beim Einsetzen in die SQL-Query durch mysql_real_escape_string filtern.
- Alle Datenbankinhalte bei der Ausgabe auf der HTML-Seite mit htmlentities oder htmlspecialchars (falls die Seite als Unicode ausgeliefert wird) filtern.

Das schützt vor SQL-Injections und XSS.

Mit Befehlen wie strip_tags kann dann noch verhindert werden, dass HTML-Code in escapter Form in den Beiträgen auftaucht. Also beispielsweise "<a href="http://example.org/">". Anwendung entweder vor dem Eintrag in die Datenbank (auch vor Anwendung von mysql_real_escape_string) oder vor der Ausgabe (also vor htmlentities bzw. htmlspecialchars). -- Je nachdem, ob du etwaige Tags mitspeichern möchtest oder nicht.
 
Vor dem Eintrag in die Datenbank? Das würde ich wenn der Übersicht halber umdrehen, auch wenn es faktisch wohl egal ist, damit auf den ersten Blick ersichtlich wird, dass das Escaping vor SQL-Injections sicher ist:

PHP:
mysql_real_escape_string(htmlspecialchars($string));

Zudem ergibt htmlspecialchars an der Stelle nur dann Sinn, wenn die Ausgabe der Seite als UTF-8 (oder vergleichbar) erfolgt. Sonst müsste beim Auslesen und Einfügen in den HTML-Code trotzdem noch htmlentities angewendet werden.

Das heißt, auf diese Weise werden irreversibel vorformatierte Daten in die Datenbank eingetragen, die ein bestimmtes Ausgabe-Encoding erfordern. Das kann man so machen -- und es kann dafür gute Gründe geben --, aber meiner Meinung nach ist es in der Regel flexibler, die Originaldaten unverändert zu speichern und entsprechend für die jeweilige Ausgabe zu verarbeiten (siehe mein erster Post).

Aber gut, so geht's auch. :)
 
Ich hab jetzt alle Eingaben (Gästebuch, Registrierung, Kontaktformular) mit

PHP:
$name =strip_tags( $_POST['Username']);
$name= htmlspecialchars(mysql_real_escape_string($name));

abgesichert

Ich hoffe, dass das so richtig ist
 
Meiner Meinung nach ist das strip_tags nicht nötig.


Kann ich dir aber nicht mit 100% Sicherheit sagen.

Ich mache es ohne, und beim Testen (HTML Code, SQL, Javascript) hat alles tip top funktioniert.

mfg

MasterCHief
 
Meiner Meinung nach ist das strip_tags nicht nötig.


Kann ich dir aber nicht mit 100% Sicherheit sagen.

Ich mache es ohne, und beim Testen (HTML Code, SQL, Javascript) hat alles tip top funktioniert.

mfg

MasterCHief

Ja, hast Recht

Ich wollte mich zu Testzwecken mit dem Usernamen <html>
anmelden , aber es ging nicht
Die eine Zeile reicht
PHP:
$name= htmlspecialchars(mysql_real_escape_string($name));
 
zur absicherung, realisierung von bbcodes und bad-word-liste kannste dir auch mal mein tutorial hier ansehen.

Nils aka XraYSoLo
 
Zurück
Oben