Ich versuche, die Datenbereinigung (nicht die Datenvalidierung) zu verstehen, um sichere Designs für WordPress schreiben zu können. Ich habe im Internet nach einem umfassenden Leitfaden für Themenentwickler gesucht, in dem Best Practices aufgeführt sind. Es gab einige Ressourcen, auf die ich gestoßen bin, einschließlich der Codex-Seite mit dem Titel Datenüberprüfung, obwohl keine für mich nützlich war. Auf der Codex-Seite werden die verfügbaren Desinfektionsfunktionen, ihre Verwendung und ihre Funktionsweise aufgelistet, es wird jedoch nicht erläutert, warum Sie eine Funktion übereinander verwenden oder in welcher Situation Sie eine bestimmte Desinfektionsfunktion verwenden würden. Der Zweck dieses Beitrags besteht darin, alle aufzufordern, Beispiele für fehlerhaften / nicht bereinigten Code beizutragen und anzugeben, wie er für eine ordnungsgemäße Bereinigung umgeschrieben werden soll. Dies kann allgemeiner Code zur Bereinigung des Posttitels oder des Post-Thumnails-Quellcodes oder komplexerer Codes zur Bereinigung von sein$_POST
Daten für Ajax-Anfragen.
Außerdem möchte ich wissen, ob WordPress-Funktionen zum Hinzufügen / Aktualisieren der Datenbank (z. B. die im folgenden Codeblock genannten) die Desinfektionsarbeiten automatisch für Sie erledigen. Wenn ja, gibt es dann Ausnahmen, wenn Sie zusätzliche Maßnahmen ergreifen würden, um an diese WordPress-Funktionen gesendete Daten zu bereinigen?
add_user_meta
update_user_meta
add_post_meta
update_post_meta
//just to name a few
Muss die Bereinigung auch anders erfolgen, wenn HTML in PHP als Inline-HTML in PHP wiedergegeben wird? Um klarer zu sein, was ich frage, hier ist der Code:
<?php echo '<div class="some-div ' . $another_class . '" data-id="' . $id . '" >' . $text . '</div>'; ?>
<div class="some-div <?php echo $another_class; ?>" data-id="<?php echo $id; ?>"><?php echo $text; ?></div>
Beide obigen Aussagen erreichen dasselbe. Aber müssen sie anders beschenkt werden?
Antworten:
Diese Codex-Seite erklärt es ziemlich gut, denke ich.
Die wichtigste und am häufigsten verwendete Funktion ist wahrscheinlich
esc_attr
. Nehmen Sie dieses Beispiel:Wenn
$author_name
ein"
Zeichen enthalten ist, wird das Attribut geschlossen, und wenn dieses Zeichen gefolgt wird, kannonclick="do_something();"
es schlimmer werden :)Dadurch wird
print esc_attr($author_name)
sichergestellt, dass solche Zeichen codiert werden und der Browser keine Aktionen ausführt, die er nicht ausführen soll.Es gibt einen Fall, in dem Sie ihn nicht benötigen: Wenn Sie eine Zahl erwarten, können Sie die Eingabedaten einfach in eine Ganzzahl umwandeln. Beispiel:
Die Meta * -Funktionen, die Sie dort aufgelistet haben, kümmern sich bereits darum, die Eingabe für den Datenbankspeicher zu bereinigen, sodass Sie sich darüber keine Gedanken machen müssen.
Die
wpdb->prepare()
Methode muss verwendet werden, wenn Sie die DB-Abfragen selbst durchführen. Hier ist ein Beispiel:Die Schlüsselwörter
%s
und%d
werden durch Ihre bereinigten $ _POST-Werte ersetzt.Ein sehr häufiger Fehler, den ich in vielen Plugins im WP.org-Repository sehe, besteht darin, eine bereits vorbereitete (und schlecht vorbereitete) Abfrage an das Repository zu übergeben.
Mach das nicht :)
Nein.
quelle
Dieses Video von Mark Jaquith hat alles für mich geklärt. http://wordpress.tv/2011/01/29/mark-jaquith-theme-plugin-security/
quelle