Siti Drupal e Proxy: come ottenere l'IP dei visitatori

Siti Drupal e Proxy: come ottenere l'IP dei visitatori

In PHP è possibile ottenere l'IP del visitatore usando la variabile $_SERVER['REMOTE_ADDR'], però, nel caso in cui tra il client ed il web server ci sia un reverse proxy o un load balancer, questa variabile conterrà l'IP del proxy.

Quindi in questa situazione, come si può ricavare il vero IP del client?

Solitamente i proxy comunicano al server una informazione aggiuntiva nell'header della richiesta con l'intestazione X-Forwarded-For che contiene l'IP reale del client.

Per accedere a tale valore si può usare la variabile $_SERVER['HTTP_X_FORWARDED_FOR'].

Drupal 7 contiene una funzione che si occupa di determinare l'IP del client in maniera trasparente per lo sviluppatore. Questa funzione si chiama ip_address().

La funzioneip_address() verifica se il parametro reverse_proxy è attivo ed in tal caso recupera l'IP dall'intestazione X-Forwarded-For.

Basta quindi impostare la configurazione nel file settings.php inserendo le seguenti righe:

$conf['reverse_proxy'] = TRUE;
$conf['reverse_proxy_addresses'] = array('192.168.0.100', '192.168.0.101');

La seconda riga è un vettore che contiene uno o più IP del proxy (il proxy può avere più IP ad esempio per il load balancing).

Inoltre, se il proxy server ha una configurazione non standard, si può indicare il nome dell'intestazione personalizzata attraverso il seguente parametro:

$conf['reverse_proxy_header'] = 'HTTP_X_CLUSTER_CLIENT_IP';

Se si deve sviluppare un modulo per Drupal conviene ricordarsi dell'esistenza della funzione ip_address() per rendere il modulo funzionante senza intoppi anche nel caso della presenza di proxy.