Salta al contenuto

Warning: Missing argument 2 for wpdb::prepare() | Wordpress 3.5

Questo articolo ha oltre sei mesi di vita, quindi, mi raccomando, verifica le informazioni contenute in quanto potrebbero essere ormai obsolete.

Con l’aggiornamento a Wordpress 3.5 potrebbe uscirvi questo Warning.

Per prima cosa non spaventatevi è un warning non un errore, per seconda cosa spaventatevi 🙂 significa che il vostro sito ha una vulnerabilità dovuta ad un plugin non scritto correttamente o, più difficile, ad un tema.

Come mai appare quel warning?

WordPress ha un metodo “prepare” per le query al database, questa funzione serve per ripulire le query da possibili sql injection, il warning dice che la funzione non è stata implementata correttamente.

Quello che segue è il modo corretto di scriverla:

$wpdb->prepare( "SELECT * FROM table WHERE ID = %d AND name = %s", $id, $name );

Come potete vedere c’è la query dove i parametri sono stati sostituiti con dei placeholder, %d significa che è un numero e %s che è una stringa, dopo la query vengono passate le due variabili che contengono i valori da sostituire ai placeholder. Il metodo prepare della classe $wpdb, per funzionare, necessità di tutti i parametri.

Se ricevete quel warning significa che non sono stati passati tutti i parametri e quindi il metodo prepare NON sta lavorando, non sanitizza nulla e quindi siete soggetti a sql injection.

Nel caso di query come questa:

$wpdb->prepare( "SELECT COUNT(*) FROM table" );

è semplicemente inutile utilizzare il metodo prepare perchè non viene passato alcun parametro e quindi conviene scrivere la query direttamente senza utilizzare il metodo prepare che non esegue alcuna sanitizzazione.

Nel caso di query come questa:

$wpdb->prepare( "SELECT * FROM table WHERE id = $id" );

invece il problema esiste e siete quindi soggetti a sql injection perché scritto così il metodo prepare NON funziona, il modo corretto di scriverlo è quello che seguente

$wpdb->prepare( "SELECT * FROM table WHERE id = %d", $id );

Quindi, per ricapitolare, sei sei uno sviluppatore di plugin e temi DEVI correggere le tue query se invece sei un utilizzatore scrivi all’autore del plugin o del tema e chiedigli di correggere l’errore.

Questo articolo è un libero adattamento di questo post inglese.

Ho una newsletter che parla di WordPress

This is the archive

Iscriviti alla mia Newsletter

Published inWordpress

2 Comments

  1. Ciao,
    io ho un problema con wordpress da un bel pò di tempo e non riesco a venirne a capo poichè nel “dietro le quinte” non riesco ad operare.
    In pratica, quando vado a pubblicare un articolo non mi funzionano gli inserimenti di allegati (media), oppure il fatto di rendere un sito linkabile (quando cito le fonti, ad esempio!) e cosi via. Ho provato a disinstallare plugin, ho cercato di ovviare in altri modi, ma senza successo.
    Il mio problema, a questo punto, credo abbia a che fare con il problema che tu hai esposto in questo articolo ma non riesco a capire dove vanno “pescate” le stringhe per poter apportare le modifiche necessarie!

    Puoi darmi una mano, per favore?
    Grazie mille.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: