Frage

Ich entwickle eine Anwendung mit Wordpress als CMS.

Ich habe ein Formular mit einer Menge von Eingabefeldern, die vor dem in der Datenbank gespeichert hygienisiert werden muss.
Ich möchte SQL-Injection, mit JavaScript und PHP-Code injiziert und anderen schädlichen Code.

verhindern

Zur Zeit meiner eigenen Methoden zu sanieren Daten Ich verwende, aber ich fühle, dass es besser sein könnte, um die Funktionen zu verwenden, die WP Anwendungen.

Ich habe sah Data Validation in Wordpress, aber ich bin nicht sicher, wie viel dieser Funktionen ich soll verwenden, und in welcher Reihenfolge. Kann mir jemand sagen, was WP Funktionen am besten benutzen?

Zur Zeit bin ich „Hygienisierung“ meine Eingabe, indem Sie die folgenden Aktionen ausführen:

  1. Da Zeichen mit Akzenten (é, ô, æ, ø, å) in einer lustigen Art und Weise in der Datenbank gespeichert wurden (obwohl meine Tabellen sind ENGINE=InnoDB, DEFAULT CHARSET=utf8 und COLLATE=utf8_danish_ci), bin ich jetzt Umwandlung Eingabefelder, die Akzente haben kann, unter Verwendung von htmlentities ().

  2. Wenn die SQL-Zeichenfolge einzugeben Erstellung der Daten, verwende ich mysql_real_escape_string().

Ich glaube nicht, das ist genug, wenn Angriffe zu verhindern. So Vorschläge zu einer Verbesserung wird sehr geschätzt.

War es hilfreich?

Lösung

Input „Hygienisierung“ ist falsch.

Sie sollten sie nicht von der Injektion Leiden zu schützen versuchen, durch Filtern (*) oder Eingang zu entkommen, sollten Sie mit rohen Saiten, bis die Zeit, die Sie in einer anderen Kontext setzen arbeiten. An diesem Punkt müssen Sie die richtige Flucht Funktion für diesen Kontext, die mysql_real_escape_string für MySQL-Abfragen und htmlspecialchars für HTML-Ausgabe ist.

(Wordpress seine eigene Flucht Funktionen wie esc_html fügt hinzu, die im Prinzip nicht anders.)

(*: gut, mit Ausnahme von anwendungsspezifischen Anforderungen, wie die Überprüfung einer E-Mail-Adresse ist wirklich eine E-Mail-Adresse, ein Passwort gewährleistet ist vernünftig, und so weiter Es gibt auch ein vernünftiges Argument für Steuerzeichen Ausfiltern. an der Eingangsstufe, wird, obwohl dies selten tatsächlich getan.)

  

Ich bin Umwandlung jetzt Eingabefelder, die Akzente haben kann, mit htmlentities ().

Ich rate dringend davon ab, das zu tun. Ihre Datenbank sollte Rohtext enthalten; Sie machen es viel schwieriger, Datenbankoperationen für die Spalten zu tun, wenn Sie es als HTML codiert haben. Sie sind auch Zeichen wie < und " zugleich als Nicht-ASCII-Zeichen zu entkommen. Wenn Sie Daten aus der Datenbank erhalten und es aus einem anderen Grunde zu verwenden, als es in der Seite zu kopieren, haben Sie jetzt falsche HTML-Fluchten in den Daten einsehen. Nicht HTML-Flucht bis zum letzten Moment, Sie schreiben Text auf der Seite.

Wenn Sie Probleme haben, bekommen Nicht-ASCII-Zeichen in die Datenbank, die ein anderes Problem ist, die Sie zum ersten Mal statt für nicht nachhaltige Abhilfen gehen wie Speicher lösen sollten Daten HTML-codiert. Es gibt eine Reihe von Beiträgen hier alles über das Erhalten PHP und Datenbanken, um die ordnungsgemäßen UTF-8, aber die Hauptsache ist, um sicherzustellen, dass Ihre HTML-Ausgabe Seiten selbst korrekt als UTF-8 mit dem Content-Type Header / meta serviert werden zu reden. Dann überprüfen Sie Ihre MySQL-Verbindung ist auf UTF-8, zB mit mysql_set_charset() .

  

Wenn die SQL-Zeichenfolge einzugeben Erstellung der Daten, verwende ich mysql_real_escape_string ().

Ja, das ist richtig. Solange Sie dies tun, sind Sie für SQL-Injection nicht anfällig. Sie Macht sein vulnerabile zu HTML-Injektion (verursacht XSS), wenn Sie an der Datenbank Ende HTML-escaping anstelle der Vorlage Ausgabeende. Da jede Zeichenfolge, die nicht durch die Datenbank weg (zB. Abgeholt direkt von $_GET) wird nicht gewesen HTML-entkam.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top