.: HosiriS :.

Informatica e non solo

Consigli per creare applicazioni sicure in PHP

Posted by hosiris su marzo 24, 2011

Trattamento degli errori
Nel processo di sviluppo la visualizzazione degli errori ci fornisce un aiuto non indifferente. Ma dopo che il sito è completo, continuare ad utilizzare la visualizzazione degli errori può dare informazioni sul sistema ad un eventuale malintenzionato: software utilizzato, struttura directory, tipologia del server, …
Sarebbe buona norma disattivare tutti gli errori tramite il seguente comando:


error_reporting(0);

In questo modo per trattare gli errori si dovrà far uso della funzione set_error_handler.

Disabilitare le funzionalità inutili di PHP
Register Globals (register_globals)
Questa variabile è stata creata pensando ad una programmazione rapida, ma introduce problemi di sicurezza. Osserviamo il seguente link


http://yoursite.tld/index.php?var=1

register_globals ci permette di accedere alla variabile usando sia la notazione $_GET[‘var’] che $var. Sicuramente è molto comodo, ma vediamo il seguente esempio per capire cosa potrebbe succedere:


if( !empty( $_POST['username'] ) && $_POST['username'] == 'test' && !empty( $_POST['password'] ) && $_POST['password'] == "test123" )
{
    $access = true;
}

Se la variabile è attiva, è sufficiente inserire access=1 in una stringa di request riuscendo ad avere accesso.
Per poter disabilitare questa funzionalità è necessario utilizzare un .htaccess file (o modificando il php.ini):


//Disabling with .htaccess
php_flag register_globals 0


//Disabling with php.ini
register_globals = Off

Magic Quotes (magic_quotes_gpc, magic_quotes_runtime, magic_quotes_sybase)
E’ una caratteristica che evita ai programmatori l’utilizzo di funzioni quali addslashes().
Purtroppo possiamo contare almeno tre problematiche associate a questa caratteristica: in prima analisi il problema è causato dall’utilizzo concomitante di Magic Quotes e addslashes() che porterebbe ad avere degli slash multipli causando degli errori; il secondo problema si verifica se il programmatore assume che Magic Quotes è attivo ed invece non lo è, causando errori nella verifica degli input; infine, bisogna notare che Magic Quotes intercetta solo apici singoli e doppi, ma se stiamo utilizzando dei database risulta necessario trattare ulteriori caratteri.


//Disabling with .htaccess
php_flag magic_quotes_gpc 0 php_flag magic_quotes_runtime 0


//Disabling with php.ini
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off

Validazione dell’input
Oltre l’escape dei caratteri è molto utile validare l’input.
Ad esempio se volessimo validare l’input di una data, potremmo usare il seguente codice:


if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['month'] ) )
{
    // handle error
}
if ( ! preg_match( "/^[0-9]{1,2}$/", $_GET['day'] ) )
{
    // handle error
}
if ( ! preg_match( "/^[0-9]{4}$/", $_GET['year'] ) )
{
    // handle error
}

Controllare l'inserimento di codice XSS
Nella maggior parte dei casi nell'inserimento di un input è possibile passare del codice HTML, ma questo può causare problemi, specie se i dati vengono memorizzati in un database, perchè esiste la possibilità di far eseguire del codice javascript.
Per poter evitare questo inconveniente la soluzione migliore sarebbe disabilitare del tutto i tag HTML, oppure si può far uso dei BBCode in modo da permettere la formattazione del testo.

Proteggersi dell'SQL Injection
Prima di eseguire le query sarebbe buona norma controllare la stringa per verificare la presenza di caratteri non permessi.
Abbiamo due possibilità per effettuare questo controllo:


$username = mysql_real_escape_string( $GET['username'] );
mysql_query( "SELECT * FROM tbl_members WHERE username = '".$username."'");


$id = $_GET['id'];
$statement = $connection->prepare( "SELECT * FROM tbl_members WHERE id = ?" );
$statement->bind_param( "i", $id );
$statement->execute();

Una Risposta to “Consigli per creare applicazioni sicure in PHP”

  1. […] directory, tipologia del server, … Sarebbe buona norma disattivare tutti gli errori […] Continua a Leggere Posted in Creare un Blog di […]

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...