Wordpress e citazioni magiche


12

Ho scritto alcuni plugin di Wordpress e ho avuto qualche problema con Wordpress nel mettere citazioni magiche sui dati POST e GET.

In particolare, la funzione "wp_magic_quotes" in \ wp-Includes \ load.php, che viene chiamata (presumibilmente su ogni risposta) in wp-settings.php. Questa funzione aggiunge virgolette magiche ai dati anche se disattivo virgolette magiche nelle impostazioni di PHP.

/**
 * 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 );
}

È sicuro per me commentare la chiamata di wp_magic_quotes () in wp-settings.php? Cioè, influenzerà negativamente il normale codice Wordpress e / o aprirà un vettore di sfruttamento? In tal caso, esiste un altro modo per farlo oltre a modificare il codice WP (quindi non devo occuparmene ogni volta che c'è un aggiornamento)?


Qualcuno può dirmi dove / quando wp_magic_quotes()viene eseguita la funzione ? Non sono riuscito a trovare l'esecuzione in wp-core.
T.Todua,


Questo problema persiste ancora nel 2019, più di 8 anni dopo (ad es. Con PHP 7.1.33 (2019-10-23) e WordPress 5.2.4 (2019-10-14)).
Peter Mortensen,

Risposte:


8

In poche parole, WP trasforma la situazione indeterminata (le virgolette magiche potrebbero o non potrebbero essere abilitate nella configurazione del server) in determinate (le virgolette magiche sono sempre presenti e la configurazione del server non ha importanza).

Piuttosto che scherzare con questo per tutti i core di WP ha molto più senso semplicemente eliminare le barre nel codice sulle proprie variabili, quando ne hai bisogno.


7
Questo è folle, se posso. Le citazioni magiche sono considerate cattive da qualsiasi programmatore sano di mente, e questa è una scelta davvero irresponsabile da Wordpress. Non che mi sorprenda.
o0 '.

5
@Lohoris nota che WP non esiste solo qui e ora. Esiste da molti anni. Se le citazioni magiche fossero intrinsecamente cattive idee di quanto non esisterebbero in primo luogo. Mentre i tempi cambiano ed è facile urlare quanto sia una cattiva idea ora - cambiare il comportamento esistente nella base di codice comporta enormi implicazioni per la sicurezza e la retrocompatibilità.
Raro

3

L'attuale comportamento in WordPress è la migliore pratica basata sulla compatibilità di tutti i sistemi e le configurazioni PHP. WordPress ha sempre normalizzato $ _GET, $ _POST, $ _COOKIE e $ _SERVER da tagliare e si aspettano che continuerà a farlo.

Quindi, per estrarre un parametro POST o GET dobbiamo scrivere:

$value = stripslashes_deep($_POST['name']); o

$value = stripslashes_deep($_GET['name']);


0

Ho scritto una soluzione per gestire questi array superglobali in una domanda simile in StackTranslate.it.

Consiste nello scrivere un unico "metodo di accesso" (get / set) per ogni superglobal, tagliando e spogliando in modo trasparente. Quindi useresti, ad esempio:

echo _get('username');    // echo stripslashes_deep($_GET['username']);
_cookie('name', 'value'); // $_COOKIE['name'] = addslashes_deep('value');

In questo modo puoi astenersi dal fare ancora più casino con i superglobali e goderti una soluzione che funzionerà "localmente" per il tuo codice, senza effetti collaterali. Per me, è stata la soluzione definitiva.


-3

Di recente ho avuto questo problema e alla fine l'ho capito. In pratica stavo cercando quasi tutti i siti Web con citazioni magiche su WordPress e nessuno di loro mi ha aiutato.

Ecco come risolverlo:

  1. Entra nel tuo wp-settings.php

  2. Cerca wp_magic_quotes ();

  3. Commentalo e dovrebbe funzionare ora

Questo funziona perché se guardi prima di quel codice vedrai:

// Disable magic quotes at runtime. Magic quotes are added using wpdb later in //wp-settings.php.

@ini_set( 'magic_quotes_runtime', 0 );
@ini_set( 'magic_quotes_sybase',  0 );

Quelle citazioni di Magic che verranno aggiunte in seguito usando wpdb sono ciò che fa incasinare la maggior parte delle persone, e sembra essere wp_magic_quotes (). Basta commentare che eviterà che le citazioni magiche ti incasinino.


6
Cattiva idea: dopo il prossimo aggiornamento questa modifica viene persa.
fuxia

Anche se questa è una cattiva idea ™, è l'unica soluzione che ho trovato per eseguire WordPress e Magento contemporaneamente senza dare problemi a Magento durante il salvataggio dei contenuti.
forsvunnet,

1
Questa è anche una cattiva idea perché molti plugin sono scritti male e non sfuggono correttamente a SQL, quindi il tuo sito potrebbe diventare vulnerabile agli attacchi di SQL injection. E qualsiasi plugin che fa la cosa giusta eseguendo striplashes / striplashes_deep su $ _GET / $ _ POST corromperà l'input dell'utente rimuovendo le barre rovesciate.
tomdxw,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.