it-swarm.com.de

In welchen Kontexten sind Plugins für die Datenvalidierung/-bereinigung verantwortlich?

Ich möchte sicherstellen, dass alle Daten in meinen Plugins/Themes sicher behandelt werden, bevor ich in die Datenbank gehe und sie an den Browser ausgebe. Mein Problem ist, dass es Situationen gibt, in denen die API die Bereinigung für Sie übernimmt - wie beim Speichern von Post-Meta-Feldern - und andere, in denen der Autor des Plugins/Themes voll verantwortlich dafür ist - wie beim Speichern von benutzerdefinierten Einstellungen.

Im Rahmen dieser Frage geht es mir nicht darum, Daten auf Domänenebene zu validieren - beispielsweise zu überprüfen, ob ein Altersfeld in einem Formular zwischen 0 und 120 liegt oder ob eine E-Mail-Adresse gültig ist. Ich mache mir nur Sorgen um die Sicherheit - zum Beispiel darum, SQL-Abfragen zu entziehen, um SQL-Injection beim Speichern in die Datenbank zu vermeiden, oder Daten zu bereinigen, die in HTML-Vorlagen ausgegeben werden, um XSS zu vermeiden.

Ich weiß, dass Sie für die Ausgabe-Bereinigung immer Funktionen wie esc_html() und esc_attr() verwenden müssen, wenn Sie Variablen in HTML-Vorlagen zurückgeben. Aber was ist mit template tags ? Sterilisieren sie alle die Ausgabe bereits? Wenn ja, für welchen Kontext (allgemeines HTML, Tag-Attribute usw.)? Einige Funktionen haben Varianten für unterschiedliche Kontexte (wie the_title_attribute(), die meisten jedoch nicht.

Ich weiß, dass ich für die Bereinigung von Eingaben bei manuellen Abfragen $wpdb->prepare() verwenden muss, aber was ist mit der Verwendung der Einstellungs-API zum Erstellen einer Plugin-Einstellungsseite oder zum Speichern von Post-Metafeldern für einen benutzerdefinierten Post-Typ?

Im Moment habe ich mich jedes Mal, wenn ich eine Funktion verwende, durch Core gekümmert und Tutorials gelesen, um herauszufinden, ob sie bereinigt oder nicht, aber das ist fehleranfällig und zeitaufwändig. Ich hoffe, eine umfassende Liste aller möglichen Situationen zu finden und zu erfahren, ob die API damit umgeht oder nicht. z.B.,

API validiert/desinfiziert

  • Post-Meta mit update_postmeta() speichern
  • Benutzer-Meta mit update_user_meta() speichern
  • Beitragstitel ausgeben - Verwenden Sie die kontextabhängige Variante von the_title()
  • usw

Sie müssen manuell validieren/desinfizieren

  • Plugin-Optionen mit der Settings-API speichern. Übergeben Sie einen Rückruf als 3. Parameter von register_setting().
  • Direkte Datenbankabfragen: Binden Sie die Abfrage in $wpdb->prepare() ein.
  • Variablen in HTML ausgeben. Verwenden Sie esc_attr(), esc_html() usw
  • usw

Mich würde auch interessieren, warum die API sie in bestimmten Situationen bereitstellt, in anderen jedoch nicht. Ich gehe davon aus, dass es etwas mit der Unbekannten Natur der Daten zu tun hat, würde aber gerne eine gründliche Erklärung hören.

16
Ian Dunn

Ich bin mir nicht sicher, ob es so gründlich ist, aber bei jedem Plugin oder Thema sollte die Benutzereingabe bereinigt werden. Datenbankoperationen sollten mit den Methoden $ wpdb-> durchgeführt werden. Alle $ _GET- und $ _POST-Daten sollten bereinigt werden.

Dies ist die beste Vorgehensweise für die Programmierung mit PHP als mit WordPress.

Wenn es also eine WordPress-Funktion gibt, verwenden Sie diese, wenn nicht, bereinigen Sie Ihre Variablen und Eingaben selbst.

Wenn ich zu vage war, stellen Sie bitte eine genauere Frage.

0
Ciprian