Ich habe einige Wordpress-Plugins geschrieben und hatte ein Problem damit, dass Wordpress POST- und GET-Daten in magische Anführungszeichen setzt.
Insbesondere die Funktion "wp_magic_quotes" in \ wp-includes \ load.php, die (vermutlich bei jeder Antwort) in wp-settings.php aufgerufen wird. Diese Funktion fügt den Daten magische Anführungszeichen hinzu, selbst wenn ich magische Anführungszeichen in den PHP-Einstellungen deaktiviere.
/**
* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
*
* Also forces $_REQUEST to be $_GET + $_POST. If $_SERVER, $_COOKIE,
* or $_ENV are needed, use those superglobals directly.
*
* @access private
* @since 3.0.0
*/
function wp_magic_quotes() {
// If already slashed, strip.
if ( get_magic_quotes_gpc() ) {
$_GET = stripslashes_deep( $_GET );
$_POST = stripslashes_deep( $_POST );
$_COOKIE = stripslashes_deep( $_COOKIE );
}
// Escape with wpdb.
$_GET = add_magic_quotes( $_GET );
$_POST = add_magic_quotes( $_POST );
$_COOKIE = add_magic_quotes( $_COOKIE );
$_SERVER = add_magic_quotes( $_SERVER );
// Force REQUEST to be GET + POST.
$_REQUEST = array_merge( $_GET, $_POST );
}
Ist es für mich sicher, den Aufruf von wp_magic_quotes () in wp-settings.php einfach zu kommentieren? Das heißt, wird es den normalen Wordpress-Code negativ beeinflussen und / oder einen Ausnutzungsvektor öffnen? Wenn ja, gibt es eine andere Möglichkeit, als den WP-Code zu ändern (damit ich mich nicht jedes Mal darum kümmern muss, wenn es ein Update gibt)?
wp_magic_quotes()
ausgeführt wird? Ich konnte die Ausführung in wp-core nicht finden.Antworten:
Setzen Sie einfach WP in eine unbestimmte Situation (magische Anführungszeichen können in der Serverkonfiguration aktiviert sein oder nicht) in eine bestimmte Situation (magische Anführungszeichen sind immer vorhanden und die Serverkonfiguration spielt keine Rolle).
Anstatt dies für den gesamten WP-Kern zu tun, ist es viel sinnvoller, bei Bedarf einfach Schrägstriche in Ihrem Code auf Ihren eigenen Variablen zu entfernen.
quelle
Das aktuelle Verhalten in WordPress basiert auf der Kompatibilität aller PHP-Systeme und -Konfigurationen. WordPress hat immer normalisiert, dass $ _GET, $ _POST, $ _COOKIE und $ _SERVER gekürzt werden, und erwartet, dass dies auch weiterhin der Fall ist.
Um einen POST- oder einen GET-Parameter zu extrahieren, müssen wir schreiben:
$value = stripslashes_deep($_POST['name']);
oderquelle
Ich denke, die folgenden Links könnten helfen:
quelle
In einer ähnlichen Frage in Stack Overflow habe ich eine Lösung für den Umgang mit diesen superglobalen Arrays geschrieben.
Es besteht darin, eine einzelne "Accessor-Methode" (get / set) für jede Superglobale zu schreiben, transparent zu zerschneiden und zu entfernen. So würden Sie zum Beispiel verwenden:
Auf diese Weise können Sie es unterlassen, sich noch weiter mit den Superglobalen zu beschäftigen, und eine Lösung genießen, die "lokal" für Ihren Code ohne Nebenwirkungen funktioniert. Für mich war es die ultimative Lösung.
quelle
Ich hatte kürzlich dieses Problem und habe es endlich herausgefunden. Ich habe im Grunde fast jede Website nach magischen Zitaten in WordPress durchsucht und keine davon hat geholfen.
So beheben Sie das Problem:
Gehen Sie in Ihre wp-settings.php
Suche nach wp_magic_quotes ();
Kommentieren Sie es einfach aus und es sollte jetzt funktionieren
Dies funktioniert, denn wenn Sie vor diesem Code suchen, sehen Sie:
Diese Magic-Zitate, die später mit wpdb hinzugefügt werden, bringen die meisten Leute durcheinander, und es handelt sich zufällig um wp_magic_quotes (). Wenn Sie das nur auskommentieren, wird verhindert, dass magische Zitate Sie durcheinander bringen.
quelle