La guida è ancora WIP !!!
La guida seguente serve per rendere l'installazione di WordPress più sicura.
Nell'installazione di default WordPress crea un utente “admin”.
Questo rende un eventuale attacco a forza bruta (Brute Force) più semplice perché basterà variare solo la password per tentare l'ingresso.
E' buona prassi creare un nuovo utente con privilegi amministrativi e cancellare quello di default.
La creazione di password a sicurezza elevata è un buon modo per dissuadere i male intenzionati.
Per fare ciò si può ricorrere ad un generatore di password sicure come il seguente:
https://www.nexcess.net/resources/tools/secure-password-generator/
Tramite questo sito si possono generare password “tradizionali” come la seguente:
'pu<lLffT,yZJVu
oppure password “Word-Based” cioè basate sull'agregazione di parole diverse:
wing04858north35some99fourwho
Le versioni “standard” di WordPress hanno come prefisso di default per le tabelle “wp_”.
Come tutti i default, se viene mantenuto, è un grande regalo per eventuali attaccanti.
Se si cambia il default con qualcosa di “irrazionale” tipo ld1nj9bkj7tw_ la possibilità di attacchi basati sull' SQL Injection diminuisce drasticmaente.
Per cambiare il prefisso di defaul su un'istanza già installata si può operare tramite l'uso di PlugIns od “a mano”.
Di seguito prenderemo in considerazione solo il metodo manuale.
NB: Prima di eseguire le operazioni seguenti è buona cosa porre WordPress in Maintenance Mode ed eseguire un BackUp del DB.
E' necessario intervenire sul wp-config.php, rinominare tutte le tabelle nel database con il nuovo prefisso (anche le tabelle di eventuali plug-in) e aggiornare le referenze delle tabelle usermeta e options.
Di seguito referenzierò come newprefix_ il nuovo prefisso che intendo dare alle tabelle.
Apriamo il file wp-config.php e sostituire
$table_prefix = 'wp_';
con
$table_prefix = 'newprefix_';
Utilizzando un qualsiasi strumento di accesso a MYSQL, collegarsi al DB dove risiedono le tabelle di WordPress e, nel tab SQL, incollare quanto segue
RENAME TABLE `wp_commentmeta` TO `newprefix_commentmeta`; RENAME TABLE `wp_comments` TO `newprefix_comments`; RENAME TABLE `wp_links` TO `newprefix_links`; RENAME TABLE `wp_options` TO `newprefix_options`; RENAME TABLE `wp_postmeta` TO `newprefix_postmeta`; RENAME TABLE `wp_posts` TO `newprefix_posts`; RENAME TABLE `wp_terms` TO `newprefix_terms`; RENAME TABLE `wp_term_relationships` TO `newprefix_term_relationships`; RENAME TABLE `wp_term_taxonomy` TO `newprefix_term_taxonomy`; RENAME TABLE `wp_usermeta` TO `newprefix_usermeta`; RENAME TABLE `wp_users` TO `newprefix_users`;
ed eseguire.
Sempre dallo strumento di accesso a MYSQL assicurarsi che, ora, le tabelle si chiamino newprefix_NomeTabella poi eseguire quanto segue
UPDATE `newprefix_usermeta` SET `meta_key` = REPLACE( `meta_key`, 'wp_', 'newprefix_' ) UPDATE `newprefix_options` SET `option_name` = 'newprefix_user_roles' WHERE `option_name` = 'wp_user_roles'
Sezione in fase di stesura …
Nel file wp-config.php sono presenti tre simboli nei quali vanno inserite delle chiavi per aumentare la sicurezza relativa all'utilizzo dei cookies.
Queste chiavi vengono generate tramite il sito ufficiale (riportato anche nel wp-config.php):
https://api.wordpress.org/secret-key/1.1/
Per tanto il blocco
define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here');
deve essere rimpiazzato con quello fornito dalla chiamata al sito
define('AUTH_KEY', '>hOYr+;-|U%2T&kB^vR<I5=y|9);eh#!a|=-*?7@O5./8-#)4Fe.+~?eLC/0Mm#)'); define('SECURE_AUTH_KEY', '@2fY2yVY[!<+q_^+XwbCUcJvFUUL#;Fm}iFlABc7%z&34ZHK9me;cWc48Gsm-}LD'); define('LOGGED_IN_KEY', '4bqA[kQuH@che+^:mf(zDnUn&50*N+ 0D-JL~HP2GfWOXX9#b_|faq6]H#LVhLyV'); define('NONCE_KEY', 'a=wfN+C|b8-Tl/X.l-)pz~Y+TigF[m>$Nu9Urp!D{/+6|ppA eX1Zt,` YUQPcs7');
Ispezionando il codice di un sito WordPress è possibile vedere la versione installata,
questo può facilitare il lavoro degli hackers che sapendo il numero della versione potrebbero, se il cms non è aggiornato, risalire a eventuali bug.
Per nascondere la versione di WordPress si consiglia di aggiungere il seguente codice nel file /wp-includes/functions.php:
/* Hide Version Number */ /* Hide WP version strings from scripts and styles * @return {string} $src * @filter script_loader_src * @filter style_loader_src */ function fb_remove_wp_version_strings( $src ) { global $wp_version; parse_str(parse_url($src, PHP_URL_QUERY), $query); if ( !empty($query['ver']) && $query['ver'] === $wp_version ) { $src = remove_query_arg('ver', $src); } return $src; } add_filter( 'script_loader_src', 'fb_remove_wp_version_strings' ); add_filter( 'style_loader_src', 'fb_remove_wp_version_strings' ); /* Hide WP version strings from generator meta tag */ function fb_remove_version() { return ''; } add_filter('the_generator', 'fb_remove_version');
Nella cartella di WordPress si trovano alcuni files che possono rivelare la versione in uso.
Si consiglia di eliminare i files:
È importante cancellare temi e plugin che non utilizziamo per diminuire la possibilità di falle nel codice.
I plugin e i temi utilizzati devono essere, se possibile, sempre aggiornati all’ultima versione.
Questo è uno dei maggiori fattori di rischio in una installazione WordPress.
Si ricorda che due plug-ins che fanno le medesime funzioni possono andare in conflitto fra loro anche se uno dei due è disattivo su WordPress causando errori interni che possono compromettere la fruizione del sito.
Per quanto riguarda i permessi di file e cartelle, tutte le cartelle dovrebbero essere 755 e i file 644, il wp-config.php dovrebbe essere settato con permessi 600 come mostrato di seguito:
| File | Percorso | permessi |
|---|---|---|
| root directory | www.miosito.com/ | 0755 |
| wp-admin | www.miosito.com/wp-admin | 0755 |
| wp-content | www.miosito.com/wp-content | 0755 |
| wp-includes | www.miosito.com/wp-includes | 0755 |
| .htaccess | www.miosito.com/.htaccess | 0644 |
| wp-config.php | www.miosito.com/wp-config.php | 0600 |