Evitare SQL Injection con WordPress

Il problema SQL Injection è stato ampliamente discusso e tempo fa segnalavo anche un interessante PDF sull’argomento.

sql-injection

Anche lo sviluppo di plugin per WordPress può essere soggetto a questo tipo di attacchi ed è quindi bene prendere tutte le precauzione del caso ogni volta in cui si lavora direttamente con il database

Da poco ho scoperto che WordPress implementa nativamente un sistema per formattare le query SQL e la documentazione relativa alla classe WPDB ha un capitoletto dedicato alla descrizione del suo funzionamento: Protect Queries Against SQL Injection Attacks

Vediamo come funziona:

$ID = get_the_ID();

$post_type = “attachment”;

$sql_attachment = “select post_name , guid , post_mime_type
from maurizio_posts where post_type = %s and post_parent = %d”;

$wpdb->query($wpdb->prepare($sql_attachment, $post_type, $ID));

Nell’esempio viene prapareata un’estrazione di tutti gli “attachment” associati ad un determinato post ma nella query non vengono usati direttamente i valori ma dei segnaposti che verranno poi sostituiti dalla funzione “prepare“.
Il segnaposto “%s” dichiara un valore stringa mentre “%d” dichiara la nostra variabile con un valore numerico.

In questo caso i vantaggi dell’utilizzo di questa tecnica non sono molti in quanto possiamo dire che i valori passati alla query siano relativamente sicuri, ma facciamo adesso un esempio in cui diamo all’utente la possibilità di indicare il nome dell’attachment da cercare.

$search = $_GET[“search_string”];

$sql_attachment = “select post_name , guid , post_mime_type
from maurizio_posts where post_type = ‘attachment’
and post_name like (%s) “;

$wpdb->query($wpdb->prepare($sql_attachment, ‘%’.$search.’%’));

Nell’esempio la stringa di ricerca viene passata tramite un form di input e non possiamo essere certi di cosa abbia digitato l’utente e se non usassimo la funzione “prepare” potremmo essere soggetti ad un tentativo di SQL Injection.

Questa “tecnica” fa ovviamente parte anche delle linue guida per lo sviluppo di wordpress che, nel caso non conosciate, vi consiglio di andare a leggere.

Image Credits: The Tech Herald

Maurizio Pelizzone

Maurizio Pelizzone

Sono Maurizio Pelizzone, sviluppatore WordPress da oltre vent'anni e consulente di intelligenza artificiale a Torino, co-fondatore di Mavida. Realizzo plugin e integrazioni su misura per WordPress e WooCommerce, automazioni dei processi con n8n e agenti AI, e tengo corsi e workshop su Claude Code, prompt engineering e vibe coding, in presenza a Torino o da remoto. Sono speaker ai WordCamp e autore della guida gratuita in italiano a Claude Code; se vuoi parlarmi di un progetto puoi prenotare una call conoscitiva.

Lascia una risposta

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