Perchè non attivare register_globals

Se hai una variabile $_GET[“pippo”], attivando le register_globals ti trovi anche $pippo con lo stesso valore.

Questo e` un buco di sicurezza perche`:

  • stai usando una variabile che non hai controllato in nessun modo
  • potresti confonderti e pensare di usare una variabile che hai definito e trovarti a usarne una proveniente dal browser
  • non sai mai da dove arriva (GET? POST? Sessione? Cookie? un’include?)

Anche con $_GET[‘pippo’] un malintenzionato potrebbe caricare dall’esterno tramite pagina.php?pippo=10 un valore su cui non ho il controllo o sbaglio?

Si`, ma sai esattamente da dove arriva (GET), mentre con i register_globals, come dicevo, non lo sai.

Metti caso che tu definisci una variabile “loggedin” e hai le register_globals, e la salvi in sessione:

$loggedin = 1;
session_register($loggedin);

Poi, su tutte le pagine, controlli se l’utente e` loggato:

if ($loggedin == 1) { // permetti l'accesso }

Poi arriva l’utente che ti fa un bel

pagina.php?loggedin=1

E tu non sai piu` se quel loggedin arriva dalla tua sessione o dal GET. Se arriva dal GET, il tuo utente ha appena bypassato totalmente il tuo controllo ed accede alle pagine che vuole.

Senza register_globals tu avresti scritto

$_SESSION['loggedin'] = 1;

….

if ($_SESSION['loggedin'] == 1) { // permetti l'accesso }

e lui saebbe rimasto fregato.

Abilitare mod_rewrite su Apache

  1. Da terminale digito

    sudo a2enmod rewrite

  2. Modifico poi la configurazione del Virtual Host. Questo dipende dalla configurazione del mio ambiente di sviluppo locale dove ho creato un Virtual Host (‘test’) che utilizza come Document Root una cartella nella mia home (vedi questo post).
    sudo gedit /etc/apache2/sites-available/test

    Nella parte del file che segue sulle due righe che contengono AllowOverride None va modificato None in All

    <Directory />
    	Options FollowSymLinks
    	AllowOverride All
    </Directory>
    <Directory /home/nome_utente/public_html/>
    	Options Indexes FollowSymLinks MultiViews
    	AllowOverride All
    	Order allow,deny
    	allow from all
    </Directory>

    nome_utente √® il mio nome utente su Ubuntu. Se avessi voluto modificare la configurazione del sito predefinito (quello con Document Root ‘/var/www’) il comando avrebbe dovuto essere ‘sudo gedit /etc/apache2/sites-available/default’.

  3. Come ultimo passo riavvio Apache con

    sudo /etc/init.d/apache2 restart

Installare Web Server su Ubuntu

  1. Per prima cosa dobbiamo diventare amministratori del nostro computer (utente root)
    su
  2. Adesso bisogna aggiornare la lista dei pacchetti con il seguente comando
    apt-get update
  3. Si può installare in successione tuti i pacchetti
    apt-get install apache2-mpm-prefork
    apt-get install libapache2-mod-php5
    apt-get install mysql-server
    apt-get install php5-mysql
    apt-get install php5-gd

    Oppure installarli tutti con un unico comando

    apt-get install apache2-mpm-prefork libapache2-mod-php5 mysql-server php5-mysql php5-gd