2009-11-04 15 views
5

oggi mi sono imbattuto in un comportamento piuttosto strano di una mia applicazione basata su php. In una certa parte del sistema c'è un'interfaccia utente che fa uso di chiamate AJAX per riempire le caselle di elenco con contenuto dal back-end.php/ajax REMOTE_ADDR impostato su IP dell'adattatore di rete fasullo

A questo punto, il listener AJAX esegue un controllo di sicurezza su tutte le richieste in arrivo, assicurandosi che solo le risposte ricevute da IP client validi. Anche l'IP valido è memorizzato nel back-end.

Per ottenere IP del client che ho usato pianura vecchio

$_SERVER['REMOTE_ADDR'] 

che funziona per la maggior parte dei clienti. Oggi mi sono imbattuto in un'installazione in cui remote_addr conteneva l'IP di una scheda di rete che non era quella che eseguiva la comunicazione effettiva per la mia applicazione.

Googling intorno a me agve Roshan's Blog entry on the topuic:

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))//check ip is pass from prxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

Purtroppo il problema persiste.

Qualcuno ha mai inciampato in questo tipo di problema (in realtà non penso di aver scoperto un numero completamente nuovo ^^) e ha un'idea per me come risolvere questo problema?

EDIT:

Sono su

  • PHP versione 5.2.9-1
  • Apache/2.2.9 (Win32)

La comunicazione è fatta tramite una normale scheda LAN. Ora il client actuall ha più dispositivi . Adattatori VMNet e così via.

Mi chiedo come una configurazione client puo 'disturbare' un server web che tanto ...

TIA

K

+1

puoi inserire qui alcuni dettagli riguardo agli adottanti e al server che esegue l'applicazione. Voglio dire quali IP tengono. –

+0

pls vedere il mio Inoltre – KB22

+0

così scenario di esempio potrebbe apparire come questo sul lato client: eth0 - 10.0.0.1 eth1 - 10.1.1.1 poi sul server di u hanno 10.1.1.2 e quando la richiesta passa attraverso dal client al posto di 10.1 .1.1 mostra 10.0.0.1? –

risposta

4

Purtroppo, si deve prendere tutte le informazioni IP con un grano di sale.

Gli indirizzi IP vengono raccolti durante la richiesta prendendo il pacchetto e richiedendo informazioni in considerazione. Purtroppo, queste informazioni possono essere facilmente falsificate o addirittura errate (basate su un numero elevato di probabilità della rete) e non dovrebbero essere utilizzate per scopi diversi da quelli di vanità.

+0

Thx per questo, ma c'è qualche best practice che potresti raccomandare? – KB22

+1

Il codice nella tua domanda è quello che ho visto come una "migliore opzione". Otterrà l'IP corretto nella maggior parte dei casi. Comprendi solo che non mi fiderei necessariamente dei risultati. –

+1

I C e accettato, ma potresti raccomandare qualche lettura su come REMOTE_ADDR ecc. Sia effettivamente impostato da apache? Mi piacerebbe molto capire cosa mi sta causando problemi. TIA – KB22

Problemi correlati