Proteggere il sito da attacchi hacker: due trucchi efficaci
Se è vero che, ai giorni nostri, è diventato relativamente facile aprire e far funzionare un sito, è anche vero che molti tralasciano l’aspetto “sicurezza“.
Il risultato è una sfilza di “You’ve been hacked”, password perse, database corrotti, ondate di spam, o ancora peggio, l’iniezione di codice malevolo nelle pagine.
Oltre ai soliti consigli, come tenere aggiornato il proprio CMS come WordPress e simili, ed utilizzare una password lunga ed un nome utente diverso dal classico “admin”, alcune statistiche del pannello di controllo del mio sito, relative agli error 404 (gli errori di pagina inesistente), mostravano alcune cose interessanti.
Infatti, numerose volte era stato tentato l’accesso a queste pagine:
/undefined
/crossdomain.xml
/signup
/signup.php
/register.php
/wp-login.php
/administrator/
/guestbook//admin.php
/signup/
//admin.php
/member/register
/join.php
/account/register.php
/shop
/login.aspx
col risulato di “error 404”, che significava che queste pagine, nel mio sito, non esistevano.
Come si vede, il potenziale “malfattore” tentava casualmente di accedere a pagine che, di solito, chiedono username e password, o comunque permettono, tramite SQL e PHP, di accedere ad un database e corromperlo (sql injection).
Conviene, quindi, evitare di avere delle pagine con questo nome, rinominandole in maniera leggermente differente, in modo da evitare OGNI possibilità di essere “beccati” dai bot che cercano i punti deboli di un sito, e che cercano parole diffuse come “login”, “signup”, “shop”,”register”.
Un’altra statistica del mio pannello di controllo (in particolare, il log del server), recitava spesso:
[09-Dec-2012 15:35:45 Europe/Berlin] PHP Warning: mysql_query() [<a href=’function.mysql-query’>function.mysql-query</a>]: Access denied for user ‘root’@’localhost’ (using password: NO) in /xxx/xxx/xxx/yyy.php on line X
Insomma, qualcuno ha tentato di aprire alcune pagine php di una sottocartella, che di norma non devono essere aperte, ma vengono “incluse” altrove tramite la funzione php include.
L’obiettivo, in questo caso, era cercare di accedere al mio database SQL, sfruttando la riga X del file yyy.php che contiene una query SQL (mysqli_query()).
La riga
Access denied for user ‘root’@’localhost’ (using password: NO)
ci dice che è stato tentato l’accesso senza le credenziali, ovvero usando username e password di default.
Se il mio database SQL non fosse stato protetto da password, quindi, il malfattore sarebbe riuscito ad accedervi.
Anche se è piuttosto improbabile che qualcuno utilizzi un database non adeguatamente protetto da password, per evitare questo inconveniente mi è bastato disabilitare l’indicizzazione di questa ed altre cartelle dove risiedono questi file php che vengono “inclusi”.
In questo modo, il malfattore non può sapere quali siano i nomi dei file php della cartella, e non può tentare di forzare l’accesso in nessuno di questi.
Per disabilitare l’indicizzazione, è sufficiente aggiungere, nel file .htaccess di quella cartella, la riga:
Options -Indexes
Dopo aver fatto questa modifica, il log del server non mi ha più segnalato accessi “sospetti” come quello di sopra.
Qualsiasi altro consiglio che serva ad aumentare la sicurezza dei nostri siti, è il benvenuto!