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 Domain-Ebene zu validieren - z. B. 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 - z. B. um das Auslassen von SQL-Abfragen, um das Einfügen von SQL-Inhalten beim Speichern in die Datenbank zu vermeiden, oder um 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 verwenden müssen, esc_attr()
wenn Sie Variablen in HTML-Vorlagen zurückgeben. Aber was ist mit der Verwendung von Vorlagen-Tags ? Sterilisieren sie alle die Ausgabe bereits? Wenn ja, für welchen Kontext (allgemeines HTML, Tag-Attribute usw.)? Einige Funktionen haben Varianten für verschiedene Kontexte (wie the_title_attribute()
, aber die meisten nicht.
Ich weiß, dass ich für die Bereinigung von Eingaben $wpdb->prepare()
manuelle Abfragen verwenden muss, aber was ist, wenn ich die Einstellungs-API zum Erstellen einer Plugin-Einstellungsseite oder zum Speichern von Post-Metafeldern für einen benutzerdefinierten Post-Typ verwende?
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 fertig wird oder nicht. z.B,
API validiert / desinfiziert
- Post-Meta speichern mit
update_postmeta()
- Benutzermeta speichern mit
update_user_meta()
- Beitragstitel ausgeben - Verwenden Sie die kontextabhängige Variante von
the_title()
- etc
Sie müssen manuell validieren / desinfizieren
- Plugin-Optionen mit der Einstellungs-API speichern. Übergeben Sie einen Rückruf als 3. Parameter von
register_setting()
. - Direkte Datenbankabfragen: Wickeln Sie die Abfrage in
$wpdb->prepare()
. - Variablen in HTML ausgeben. Verwendung
esc_attr()
,esc_html()
usw. - etc
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.
the_title()
, the_permalink()
etc) Sie sind gut , aber mit benutzerdefinierten Daten , die Sie nicht (zB get_post_meta()
). Wenn Sie Zweifel haben, reinigen Sie sich selbst - es kann nicht schaden.