0

9 Modi Di Proteggere Un Sito Web Dai Crackers

Esiste un luogo comune, usato soprattutto dai mass media, per cui solitamente il termine hacker viene associato ai criminali informatici, la cui definizione corretta è invece “cracker“. L’hacker, infatti, è una persona che si impegna nell’affrontare sfide intellettuali per aggirare o superare creativamente le limitazioni che gli vengono imposte e non per creare danni su siti altrui. Spesso si tende a pensare (erroneamente!) che il proprio sito web sia al sicuro dai crackers perché ritenuto poco “interessante” da violare. Ma la maggior parte delle violazioni della sicurezza di un sito web non vengono fatte per rubare i vostri dati o creare qualche tipo di danno, ma per utilizzare il vostro server per inoltrare messaggi spam o per impostarlo come un web server temporaneo e riempirlo con files di natura illegale! Il processo di “cracking” viene regolarmente eseguito da script automatici che setacciano Internet continuamente nel tentativo di sfruttare i noti problemi di sicurezza del software di un sito. Perciò oggi vorrei darvi 9 consigli utili per aiutarvi a mantenere sicuro il vostro sito internet.

hacker

1. Mantenere Il Software Aggiornato

Può sembrare ovvio, ma assicurarsi di mantenere il software aggiornato è di vitale importanza per la sicurezza del vostro sito web. Questo vale sia per il sistema operativo del server, l’antivirus e qualsiasi altro software in esecuzione sul vostro sito web (come un CMS). In caso contrario, i crackers approfitteranno subito di queste falle. Se invece si utilizza una soluzione di hosting gestito allora non ci sarà bisogno di preoccuparsi tanto dall’applicare aggiornamenti di sicurezza per il sistema operativo, in quanto lo farà per voi la società di hosting in questione. Se si utilizza software di terze parti sul vostro sito web, si dovrebbe controllare che sia abbastanza veloce da applicare tutte le patch di sicurezza. Tuttavia, la maggior parte dei produttori di software hanno solitamente una mailing list o RSS feed dettagliata per scovare eventuali problemi di sicurezza del vostro sito web. Inoltre, programmi come WordPress, Umbraco e molti altri CMS ci notificano spesso gli aggiornamenti di sistema disponibili subito dopo il login.

2. SQL

Per chi non lo sapesse, l’SQL è il linguaggio web usato per la creazione di database relazionali. Gli attacchi tramite esso avvengono quando un utente malintenzionato utilizza il campo di un parametro web o URL per accedere o manipolare il database del vostro sito. E quando si utilizza un SQL standard, diventerà facile inserire inconsapevolmente alcuni “codici canaglia” nella vostra query che potrebbero poi essere utilizzati dai crackers per cambiare le tabelle, ottenere informazioni e cancellare dati. Per ovviare a questo problema, dovrete utilizzare sempre query parametrizzate (che hanno la maggior parte dei linguaggi web e sono facili da implementare).

Ad esempio, considerate questa query….

"SELECT * FROM table WHERE column = '" + parameter + "';

Se un hacker cambia il parametro URL per passare a ‘o ‘1’ = ‘1 , questo farà sì che la query assomigli a questa….

"SELECT * FROM table WHERE column = '' OR '1'='1';"

Poiché “1” è uguale a “1”, questo permetterà all’hacker di aggiungere una query aggiuntiva alla fine del comando SQL che sarà anche eseguita.

3. XSS

Il Cross Site Scripting o XSS è una vulnerabilità che affligge siti web dinamici che impiegano un insufficiente controllo dell’input nei form. Con esso, un hacker potrà inserire o eseguire codice lato client al fine di attuare un insieme variegato di attacchi quali ad esempio: raccolta, manipolazione e reindirizzamento di informazioni riservate, visualizzazione e modifica di dati presenti sui server, alterazione del comportamento dinamico delle pagine web ecc. Il metodo più sicuro per un programmatore PHP, è quello di usare una delle tre funzioni che permettono l’escape dei caratteri html inserite in una stringa. Esse sono htmlspecialchars(), htmlentities(), strip_tags. Sono tutte sicure e si differenziano soltanto per l’output.

4. Messaggi Di Errore

Fate sempre attenzione alla quantità di informazioni che vi vengono fornite nei messaggi di errore. Ad esempio, se si dispone di un modulo di login sul ​​vostro sito web dovreste innanzitutto pensare alla lingua da utilizzare per comunicare l’errore quando si tenta di accedere con delle credenziali errate. Vi consiglio di utilizzare dei messaggi generici come “Nome utente o password non corretta“, ma anche non specificare mai quando un utente ha ottenuto la metà del diritto di query (cioè quando ha inserito un parametro corretto su due). Se un utente malintenzionato tenta un attacco volto ad ottenere un nome utente e una password e il messaggio di errore gli dirà che uno dei due campi è corretto, allora potrà concentrarsi completamente sull’altro campo. Potrebbe sembrare ovvio, ma è un errore commesso da molti programmatori!

5. Convalida Server

La convalida (validation) dovrebbe sempre essere fatta sia sul browser che sul server. Se l’utente utilizza un browser che supporta l’HTML dinamico (DHTML), i controlli di convalida ASP.NET possono eseguire la convalida utilizzando lo script client. Poiché i controlli sono in grado di fornire un feedback immediato, senza eseguire un percorso di andata e ritorno al server, l’utilizzo della pagina da parte dell’utente risulterà migliorato. Nella maggioranza dei casi, non è necessario apportare alcuna modifica alla pagina o ai controlli di convalida per utilizzare la convalida lato client. I controlli, infatti, sono in grado di rilevare automaticamente se il browser supporta il DHTML e di eseguire l’eventuale verifica. Per la convalida lato client viene utilizzato lo stesso meccanismo di visualizzazione degli errori utilizzato per la convalida lato server.

6. Passwords

Tutti sanno che si dovrebbero sempre utilizzare password complesse per i propri siti web, ma questo non significa che poi lo si farà effettivamente! E’ fondamentale utilizzare password al server e all’area web admin, ma altrettanto importante sarà anche insistere sulle password per gli utenti che tutelino la sicurezza del loro account. Per quanto a molti potrebbero non piacere, bisogna sempre far rispettare dei requisiti di password, come ad esempio un minimo di circa otto caratteri (tra cui una lettera maiuscola). Questi parametri aiuteranno a proteggere le loro informazioni nel lungo periodo. Inoltre, le passwords dovranno essere sempre memorizzate come valori crittografati, preferibilmente utilizzando un algoritmo di hashing a senso unico, come SHA (Secure Hash Algorithm). Usando questo metodo significa che quando si esegue l’autenticazione degli utenti, si useranno soltanto valori crittografati e quindi più sicuri. Inoltre, se si sta utilizzando .NET, allora vale la pena utilizzare dei provider membership in quanto sono molto configurabili e forniscono un sito web con molta sicurezza “di serie”. 

7. Caricamento Files

Consentire agli utenti di caricare file su un sito web potrebbe rappresentare un ottimo servizio……ma anche un grosso rischio per la sicurezza dello stesso, anche se si tratta semplicemente di cambiare il loro avatar! Il rischio è che qualsiasi file caricato (per quanto “innocente” possa sembrare), potrebbe contenere uno script che quando eseguito sul server danneggi in qualche modo il sito web. Se si dispone di un modulo per l’upload di file, allora avrete bisogno di trattare tutti i file con sospetto! Se si consente agli utenti di caricare delle immagini, non potete certo contare solo sull’estensione del file o il tip per verificare che si tratti di un’immagine, in quanto questi possono essere facilmente falsificati. Nemmeno aprire il file e leggere l’intestazione o utilizzando le funzioni per controllare le dimensioni dell’immagine non rappresentano una prova certa (e sicura!). La maggior parte dei formati dei file immagini consentono la memorizzazione di una sezione di commento che potrebbe contenere codice PHP che potrebbe essere eseguito dal server. Quindi, che cosa si può fare per evitare questo? Se si utilizza *nix è possibile creare un file htaccess (vedi sotto)……

deny from all
    <Files ~ "^\w+\.(gif|jpe?g|png)$">
    order deny,allow
    allow from all
    </Files>

In definitiva, la soluzione consigliata è quella di impedire l’accesso diretto ai file caricati tutti insieme. In questo modo, tutti i file caricati sul vostro sito web vengono memorizzati in una cartella al di fuori del Webroot o nel database. Se i file non sono direttamente accessibili, sarà necessario creare uno script per recuperare i file dalla cartella privata (o un gestore HTTP .NET) e inviarli al browser. I tag immagine supportano un attributo src che non è un URL diretto a un’immagine, quindi l’attributo src punterà allo script di invio del file che imposta il tipo di contenuto corretto nell’intestazione HTTP. Per esempio….

  1. <img src=”/imageDelivery.php?id=1234″ />
  2. <?php
  3.      // imageDelivery.php
  4.      // Fetch image filename from database based on $_GET[“id”]
  5.      …
  6.      // Deliver image to browser
  7.       Header(‘Content-Type: image/gif’);
  8.      readfile(‘images/’.$fileName);
  9. ?>

Assicuratevi inoltre di avere una configurazione ottimale firewall che blocchi tutte le porte non essenziali. Se possibile la creazione di una DMZ (Demilitarised Zone) consentirà solo l’accesso alla porta 80 e 443 “al mondo esterno”. Infine, non dimenticare di limitare l’accesso fisico al server .

8. SSL

L’SSL è un protocollo utilizzato per dare maggiore sicurezza su Internet. Ed è sempre una buona idea utilizzare un certificato di sicurezza ogni volta che si passano delle informazioni personali tra il sito web e il web server o database. I pirati informatici potrebbero “fiutare” queste informazioni e se il mezzo di comunicazione non è sicuro, saranno in grado di utilizzarle per ottenere l’accesso agli account utente e ai dati personali.

ssl

9. Strumenti di Sicurezza Per Il Sito

Una volta che si pensa di aver fatto tutto il possibile per il proprio sito, allora sarà arrivato il momento di testare l’effettiva sicurezza del vostro website. Il modo più efficace per farlo è attraverso l’uso di alcuni strumenti di sicurezza del sito web, spesso definiti come “test di penetrazione“. A questo proposito esistono molti prodotti commerciali e gratuiti che vi possono aiutare in questo. Fra i più famosi e gratuiti troviamo….

  • Netsparker, ottimo per testare la vulnerabilità da attacchi SQL e XSS
  • OpenVAS, che sostiene di essere il più avanzato scanner di sicurezza open source. Decisamente buono per testare le vulnerabilità più comuni, anche se può essere difficile da installare e richiede un server OpenVAS da installare e che gira solo su *nix.

I risultati di questi test automatizzati possono essere scoraggianti, in quanto potrebbero presentarvi una grande quantità di potenziali problemi. La cosa importante è concentrarsi prima sulle questioni critiche. Tuttavia, ogni problema segnalato viene normalmente accompagnato da una buona spiegazione della potenziale vulnerabilità. Probabilmente troverete che alcune delle questioni poste (di livello medio/basso) non rappresentano una vera minaccia per il vostro sito.

Condividi suShare on Facebook0Tweet about this on TwitterShare on Google+0Share on Reddit0

Michele D'Ippolito

Lascia un commento

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


*