ADNKRONOS

Tecnologia

Amazon Books

WallPapers

Driver Image Banner 728 x 90

Indice articoli

 

 

Usare Register Globals

Una caratteristica del PHP che può essere usata per migliorare la sicurezza è configurare il PHP con register_globals = OFF. Annullando la visibilità delle variabili sottomesse da qualsiasi user al PHP, si riduce il numero di queste che possono essere oggetto di attacco. Occorrerà più tempo per organizzare un attacco ed in ogni caso le vostre variabili interne saranno isolate da quelle utilizzate nelle form (per esempio).

 

Esempio 14. Lavorare con register_globals=on

<?php

if ($username) { // can be forged by a user in get/post/cookies

$good_login = 1;

}

 

if ($good_login == 1) { // can be forged by a user in get/post/cookies,

fpassthru ("/highly/sensitive/data/index.html");

}

?>

 

Esempio 15.Lavorare con register_globals = off

<?php

if($_COOKIE['username']){

// can only come from a cookie, forged or otherwise

$good_login = 1;

fpassthru ("/highly/sensitive/data/index.html");

}

?>

Usare questa opzione in modo opportuno rende possibile prendere misure preventive per avvisare quando sta avvenendo un attacco Se voi sapete prima, ed esattamente, da dove viene il valore di una variabile , potete controllare se il suo valore o la sua provenienza sono corrette. Anche se questo non garantisce dalla modifica dei dati, questo però richiede che l'attaccante modifichi i vostri dati nel modo corretto.

Esempio 16. controllare l'inquinamento di una variabile

<?php

if ($_COOKIE['username'] &&

!$_POST['username'] &&

!$_GET['username'] ) {

// Perform other checks to validate the user name...

$good_login = 1;

fpassthru ("/highly/sensitive/data/index.html");

} else {

mail("Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.", "Possible breakin attempt", $_SERVER['REMOTE_ADDR']);

echo "Security violation, admin has been alerted.";

exit;

}

?>

Naturalmente non è che porre ad off register_globals rende sicuro il codice. Lo rende sicuro controllare ciascun dato che proviene dall'esterno.

 

Dati Sottomessi dagli utenti

Le più grandi debolezze in molti programmi PHP non sono implicite nel linguaggio, ma semplicemente sono programmi scritti senza pensare ai problemi di sicurezza. Per questa ragione, dovete sempre considerare le implicazioni di un frammento di codice ed i possibili danni che può arrecare se alle sue variabili viene assegnato un valore errato.

Esempio 5-17. Utilizzo pericoloso delle variabili

<?php

// cancellare un file dalla directory home dello user o forse di qualcun altro

unlink ($evil_var);

// scrivere il log degli accessi o forse un nuovo utente in /etc/passwd ?

fputs ($fp, $evil_var);

// eseguire qualcosa di banale oppure rm -rf *?

system ($evil_var);

exec ($evil_var);

?>

Dovete sempre, verificare con cura il vostro codice per accertarvi che le variabili sottomesse da un browser web siano controllate propriamente, e dovete farvi le seguenti domande :

Questo script accederà solo ai file dovuti ?

Possono essere inseriti dati non usuali o indesiderati ?

Questo script può essere usato in un modo non voluto ?

Può essere usato in unione con altri script in un modo negativo ?

Le transazioni possono essere loggate adeguatamente ?

 

Rispondendo adeguatamente a queste domande mentre scrivete lo script, piuttosto che dopo, voi prevenite una possibile riscrittura dello stesso per incrementare la vostra sicurezza.

Partendo con questo in mente voi non garantirete la sicurezza del vostro sistema, ma sicuramente vi aiuterà a migliorarla.

Voi potete anche considerare l'ipotesi di disabilitare le opzioni register_globals, magic_quotes, o altre opzioni che possono confondere sull'origine dei dati sottomessi dall'utente.

Effettuare il debug della applicazione utilizzando il reporting degli errori del PHP, può aiutarvi a capire quali sono le variabile utilizzate prima di essere inizializzate o controllate in modo da prevenire un utilizzo inappropriato di queste.

Nascondere il PHP

In generale la sicurezza ottenuta dal nascondere è una delle forme di sicurezza più deboli. Ma in qualche caso un po' più di sicurezza è desiderabile.

Con poche semplici tecniche possiamo nascondere il PHP, in modo da rallentare un attaccante che sta cercando debolezze nel vostro sistema.

Settando expose_php = off nel vostro file php.ini, riducete le informazioni che gli possono essere rese disponibili.

Un altra tattica è configurare Apache per interpretare con il PHP differenti tipi di file , per esempio con una direttiva in .htaccess o nel file di configurazione di Apache stesso. Potete allora usare per i file PHP delle estensioni ingannevoli.

 

Esempio 18. nascondere PHP come un altro linguaggio

# Make PHP code look like other code types

AddType application/x-httpd-php .asp .py .pl

nasconderlo completamente

Esempio 19. usare un tipo sconosciuto di estensione per l'estensione PHP

# il codice PHP sembra di una estensione sconosciuta

AddType application/x-httpd-php .bop .foo .133t

o nasconderlo come codice html, questo però ha dei riflessi sulle performance perchè vengono interpretate anche le pagine di puro html.

Esempio 20. usare il tipo html come estensione PHP

# tutto il codice php sembra html

AddType application/x-httpd-php .htm .html

La prevenzione attraverso il mascheramento è secondaria rispetto a ciò che è stato visto in precedenza ma presenta pochi svantaggi e può aiutare.