Quello dei prefissi delle tabelle del database di WordPress è uno dei punti fondamentali della sicurezza di WordPress, stando a quanto si legge in giro. WordPress di default applica alle sue tabelle il prefisso “wp_”, ed è consigliabile cambiarlo in qualcosa di meno riconoscibile, una stringa a casaccio e complicata tipo “ehd045s_”. Questo dovrebbe aumentare la sicurezza del beneamato blog in caso di attacchi malevoli di vario tipo, soprattutto SQL injection.
WordPress prima installazione
Sapendolo prima è tutto molto facile, prima di procedere con l’installazione vera e propria del CMS basta impostare il valore desiderato nel file di configurazione di WordPress, wp-config.php.
Per farlo si modifica la riga:
$table_prefix = 'wp_';
in
$table_prefix = 'ehd045s_';
Tutto fatto, lo script di installazione è istruito a dovere e le tabelle assumeranno il prefisso desiderato, e non ci si deve più preoccupare.
WordPress già installato
In questo caso la faccenda si complica, bisogna intervenire su un database già formato e magari zeppo di dati, qualsiasi errore e il beneamato blog diventa una poltiglia inutilizzabile.
Prima di qualsiasi intervento su un database in uso, è indispensabile fare un backup del database! Poi non venite a piangere se succede qualcosa…
Fatto il backup del database, vediamo come si procede alla rinomina dei prefissi delle tabelle.
Esiste un plugin che potrebbe agevolare questa operazione, si chiama WP Security Scan ed è realizzato da Michael Torbert.
Il problema sull’utilizzo di questo plugin è che non tutti gli hosting prevedono abbastanza permessi sul database, e questo impedisce di fatto al plugin di rinominare le tabelle.
Se il fornitore dell’hosting è collaborativo, si può chiedergli di configurare i permessi sul database allo scopo, purtroppo nella maggior parte die casi questo non avviene ed occorre intervenire in altro modo.
Simulazione hosting in locale
La strada più semplice per chi non si fida più di tanto a metter le mani sul proprio database è quella di replicare il tutto in un computer locale dove effettuare le modifiche, ma non è da tutti dato che serve un computer con PHP/MySQL (possibilmente della stessa versione utilizzata nell’hosting), con installato un WordPress (anche qui stessa versione) funzionante e dotato del plugin WP Security Scan.
Il tutto è relativamente semplice, ma i diversi passaggi richiedono più tempo di un intervento manuale (che vedremo subito dopo):
- Si prende il backup del database del beneamato blog, che dovremmo aver fatto prima del solo pensare di fare delle modifiche, e lo si importa nel database del WordPress in locale. Nel wp-config.php locale il server per il database sarà localhost e l’utente utilizzato per connettersi al database sarà root con relativa password, così non ci sarà bisogno di preoccuparsi dei permessi, visto che root può fare tutto ciò che gli pare.
- Grazie al plugin WP Security Scan si rinominano le tabelle da “wp_” a quello che più ci aggrada, purché complicato e difficilmente individuabile.
- Si effettua un backup del database appena modificato e lo si importa nel database on line.
- Si modifica l’istruzione $table_prefix nel file do configurazione wp-config.php con il nuovo prefisso, come abbiamo visto all’inizio di questo articolo.
Ecco fatto, se abbiamo fatto tutto a modino tutto dovrebbe funzionare come prima.
Soluzione manuale
Premessa: io ho modificato manualmente le tabelle di diversi database, con WordPress 2.9x e anche 3.0, e non ho riscontrato anomalie. Anche con plugin diversi questi continuavano a funzionare senza problemi.
Alla fine dei conti un intervento manuale potrebbe rivelarsi più semplice e veloce di quanto si temeva. Se optiamo per un intervento manuale direttamente sul database, l’unico requisito è di avere accesso diretto al database stesso, tramite riga di comando (più complicato e improbabile) o tramite phpMyAdmin, interfaccia web di gesione dei database MySQL che ormai tutti i provider mettono a disposizione.
Noi preferiremo ovviamente la seconda soluzione, che vediamo passo passo:
1. abbiamo fatto il backup del database vero?
2. nell’interfaccia di phpMyAdmin dovremmo ritrovare una lista di tabelle simile a questa:
wp_blogs
wp_blog_versions
wp_commentmeta
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_registration_log
wp_signups
wp_site
wp_sitemeta
wp_terms
wp_term_relationships
wp_term_taxonomy
wp_usermeta
wp_users
wp_wp_user_ipb
potrebbero essercene ancora, a noi interessano tutte quelle che iniziano con “wp_”. Per comodità, conviene farsi un elenco di tutte queste tabelle in un file di testo, che modificheremo affinché diventi una cosa simile:
Rename table wp_blogs to ehd045s_blogs;
Rename table wp_blog_versions to ehd045s_blog_versions;
Rename table wp_commentmeta to ehd045s_commentmeta;
Rename table wp_comments to ehd045s_comments;
Rename table wp_links to ehd045s_links;
Bisogna farlo per tutte le tabelle da modificare (quindi la lista sarà molto più lunga), una riga per ogni tabella, un punto-e-virgola alla fine di ogni riga (la colorazione diversa è solo per evidenziare il senso delle modifiche).
2. Nel phpMyAdmin, con il database che ci interessa aperto, selezioniamo il tab SQL e inseriamo dentro la nostra bella lista appena creata (nell’esempio la lista è molto parziale…) e pigiamo su Esegui.
3. Torniamo alla lista delle tabelle su phpMyAdmin (selezionando il tab Struttura) noteremo che il prefisso è cambiato. Se così non fosse qualcosa è andato storto, rivedere il punto precedente. Altrimenti passare al punto 4.
4. Occorre entrare nella tabella wp_options, che in virtù delle modifiche effettuate sopra sarà diventata ehd045s_option. Basta cliccarci sopra dalla lista delle tabelle nella parte sinistra della pagina di phpMyAdmin, e poi cliccare sul tab Mostra.
Occorre trovare la voce wp_user_roles nella colonna option_name. Attenzione che la colonna potrebbe avere centinaia di risultati, e phpMyAdmin ne mostra solo poche decine di default.
Una volta trovata bisogna cambiare anche qui il prefisso, diventando quindi ehd045s_user_roles.
5. Ora occorre esplorare la tabella wp_usermeta (diventata nel frattempo ehd045s_usermeta), sempre cliccandoci dall’elenco di sinistra, e successivamente ancora sul tab Mostra.
Qui le righe sono poche decine in tutto, nella maggior parte dei casi, conviene ordinarle per il valore meta_key. Troveremo diverse voci di questa colonna che iniziano con “wp_“, e anche in questo caso occorre modificarle in “ehd045s_“.
6. Abbiamo terminato. Se tutto è filato liscio, e se è stato cambiato il valore di $table_prefix nel file di configurazione (rivedi inizio articolo), il beneamato blog dovrebbe funzionare a modino come prima, ma con un filino di sicurezza in più.
Doveroso avvertimento: la procedura fin qui descrittà è stata testata con successo dal sottoscritto in più di un database di WordPress, sia 2.9.x che 3.0, ed ho cercato di essere più accurato possibile nella descrizione dei passaggi, ma non mi assumo nessuna responsabilità in caso di problemi.
Nel caso che la procedura sia andata a buon fine, una buona bottiglia di vino è particolarmente gradita 😉
7 risposte
Ho letteralmente rivoltato il web per risolvere il problema. Poi mi sono imbattuto in questo tutorial e me lo ha risolto!
Chiaro, pulito, geniale
Grazie mille
Grazie a te per il feedback! 😉
rob
Infatti. L’ho rifatto ed è andato tutto bene. Grazie… se ci sono riuscita io… ce possono riuscire tutti. Grazieeeeeee
Approfittando di un errore nel db… ho disinstallato e reinstallato WP. St oseguendo la procedura. HO rinominato tutte le tabelle ma sono ferma al momento in cui trovo la tabella wp_user_roles. Trovandomi dentro wp_option come facci oa rinominare WP_user_roles? Se la seleziono e poi clicco su SQL dentro ci trovo già scritto questo “SELECT * FROM `cdrlgo_options`”
HELP… SONO BLOCCATA
secondo me non hai eseguito le istruzioni alla lettera. ricomincia daccapo, fallo per bene e vedrai che ti andrà meglio… 😉
In precedenza avevo più o meno fatto questo lavoro ma automatizzandoo i rename sul database con un plugin studiato sul momento per poterlo poi fare con pigrizia le volte successive, anche se avrei dovuto includere gli update per gli altri campi, invece che risolvere poi manualmente il casino che avevo combinato! 🙂