Was macht WordPress, wenn magische Anführungszeichen auf dem Server deaktiviert sind?
Lesezeit: 3 Minuten
Wir haben kürzlich ein Upgrade auf PHP 5.4.15 durchgeführt, und es sind standardmäßig keine magischen Anführungszeichen aktiviert. Es war an der Zeit 🙂
Aber es stellt sich heraus, dass wp aus internen Kompatibilitätsgründen seine eigenen Schrägstriche zu POST und allem hinzufügt.
Jetzt hatte ich in vielen Plugins einige vernünftige Funktionen, die Schrägstriche entfernen würden, wenn sie von PHP hinzugefügt würden:
function POSTGET_stripslashes_all($forced=false)
{
if(!get_magic_quotes_gpc() and !get_magic_quotes_runtime()) if(!$forced) return;
....
Aber wp fügt Schrägstriche hinzu, unabhängig von den PHP-Einstellungen, also habe ich am Ende IMMER Schrägstriche entfernt, unabhängig von irgendwelchen Einstellungen. Das Problem ist, was wäre, wenn der Benutzer wörtliche Schrägstriche in seiner Eingabe verwenden wollte?
Wie bringt man etwas Sinn hinein? Ich möchte nicht immer Schrägstriche entfernen. Wie sind Sie das angegangen? Gibst du einfach auf und streifst alles ab, wenn es um wp geht? Gibt es eine nette Faustregel, die sagt, wo und wo nicht wp Dinge slashes?
Johann
Nun, ich musste meine eigene Antwort finden.
file: wp-settings.php > function wp_magic_quotes() is called.
Diese Datei ist fast enthalten, wenn wp ausgeführt wird, wird bedingungslos von wp-config.php eingeschlossen.
der Funktionsaufruf steht vor fast allem,
ABER aufgerufen nach advanced-cache.php
UND nach dem Aktionshaken do_action( ‘plugins_loaded’ ).
die Funktion selbst:
function wp_magic_quotes() (is in file wp-includes/load.php)
{
if(get_magic_quotes_gpc()) strip_slashes()
adds slashes to POST, GET, COOKIES and SERVER, using add_magic_quotes()
}
Wenn Sie also entscheiden müssen, ob Sie Schrägstriche entfernen möchten oder nicht, verwenden Sie:
if(!get_magic_quotes_gpc() and !function_exists('wp_magic_quotes')) do_not_strip;
Und hier ist die vollständige Formularfunktion:
function POSTGET_stripslashes_all($forced=false)
{
global $POSTGET_stripslashes_all_done;
if(!get_magic_quotes_gpc() and !function_exists('wp_magic_quotes')) if(!$forced) return;//wp check
if($POSTGET_stripslashes_all_done) return;
//stripslashes
if(is_array($_POST)) $_POST=POSTGET_stripslashes_deep($_POST,$forced);
if(is_array($_GET)) $_GET=POSTGET_stripslashes_deep($_GET,$forced);
if(is_array($_REQUEST)) $_REQUEST=POSTGET_stripslashes_deep($_REQUEST,$forced);
$POSTGET_stripslashes_all_done=true;
}
function POSTGET_stripslashes_deep($value,$forced=false)
{
global $POSTGET_stripslashes_all_done;
if(!get_magic_quotes_gpc() and !function_exists('wp_magic_quotes')) if(!$forced) return $value;
if($POSTGET_stripslashes_all_done) if(!$forced) return $value;
if(is_string($value)) return stripslashes($value);
if(is_array($value))
foreach($value as $name=>$val)
$value[$name]=POSTGET_stripslashes_deep($val,$forced);
return $value;
}
Wovon redest du, ‘der Code ist nicht gültig’? Lassen Sie uns nützliche Kommentare abgeben, dies ist Stackoverflow, kein Chatroom.
– Johann
28. November 2013 um 18:11 Uhr
Es gab einige Kommentare ohne irgendwelche //, was es nicht als PHP-Code lauffähig machte. Ungültiger PHP-Code. Aber eigentlich macht die Funktion Sinn, sie war nur schwer abzulesen. Ich wollte es ursprünglich positiv bewerten, aber es war so schwer zu lesen, dass ich beim letzten Mal aufgegeben habe. Ich werde es jetzt trotzdem hochstimmen… …ich benutze es jetzt einfach stripslashes() auf alle geposteten Daten in WP, und wenn ich da ganz sicher gehen will, würde ich die Daten clientseitig mit Javascript in BASE64 packen und so versenden und auf dem Server entpacken. Auf diese Weise kann ich sicher sein, dass WP oder PHP keine Schrägstriche hinzufügen.
– gregn3
3. Dezember 2013 um 19:02 Uhr
10545300cookie-checkWas macht WordPress, wenn magische Anführungszeichen auf dem Server deaktiviert sind?yes