Was ist "genug Desinfektion" für eine URL [duplizieren]

8

Die URL wäre

  1. Gespeichert in einer MySQL-Datenbank
  2. Wird verwendet, um ein Bild im Benutzerprofil anzuzeigen

würde strip_tags () und mysql_real_escape_string () genug sein?

    
aslum 12.01.2010, 02:22
quelle

3 Antworten

16

"Genug Desinfektion" hängt stark davon ab, von welcher Umgebung Sie sprechen. Sanitization for MySQL sollte von der Bereinigung für die Webausgabe als vollständig getrennt betrachtet werden, und Sie sollten sie separat behandeln, um eine Menge Ärger zu vermeiden.

Sanitisierung für MySQL

  • mysql_real_escape_string() wird ein Stück Daten bereinigen und es in eine SQL-Abfrage einfügen.
  • Jede andere Art von bösartigen Daten, wie HTML-Tags innerhalb der Zeichenfolge, sollten absolut ignoriert werden. Wenn du versuchst, es hier zu manipulieren, wirst du Kopfschmerzen bekommen, wenn du versuchst, es später wieder zu manipulieren, nachdem du es aus der Datenbank geholt hast. Schlechte "Web-Daten" können Ihrer Datenbank nicht schaden.

Desinfektion für die Ausgabe

  • htmlspecialchars($val) zur Ausgabezeit verhindert, dass schädliche Tags gerendert werden, weil die Zeichen < und > in ihre Entitätsdarstellungen konvertiert und nicht als Tagtrennzeichen dargestellt werden.
  • Verwenden Sie den Modifizierer ENT_QUOTES , wenn Sie etwas ausgeben, das sich in einem in Anführungszeichen gesetzten HTML-Element befindet, z. B. <input name="email" value="<?php echo htmlspecialchars($email,ENT_QUOTES); ?>" />

Das sollte alles sein, was Sie brauchen, außer Sie haben spezielle Anforderungen. strip_tags() sollte nicht wirklich für die Bereinigung verwendet werden, da es mit schlecht formatiertem HTML getäuscht werden kann. Sanitisierung ist ein wertvolles Ziel, und wenn Sie Ihre Kontexte getrennt halten können, werden Sie weniger Probleme mit der Datenmanipulation zwischen ihnen haben.

    
zombat 12.01.2010, 02:56
quelle
1

Es ist wahrscheinlich sicherer und besser, htmlentities () für die Zeichenfolge aufzurufen, anstatt auf strip_tags () zu zählen.

strip_tags () entfernt keine speziellen HTML-Zeichen wie '"&

z. B., wenn Ihr Code lautet:

%Vor%

und

%Vor%

Dann enden Sie mit:

%Vor%

Was ziemlich offensichtlich die Wurzel eines XSS-Lochs ist; Ein tatsächlicher Exploit bleibt als Übung für den Leser übrig.

    
Frank Farmer 12.01.2010 02:28
quelle
0

Ich habe zuerst Franks Antwort aufgefrischt, aber ich dachte an ein Problem: htmlentities () wird legale URLs wie folgt brechen:

Ссылка

Vielleicht sind Abstreifwinkel + mysql_real_escape ausreichend?

    
justkevin 12.01.2010 02:35
quelle

Tags und Links