2012-03-26 12 views
15

Poiché la dimensione dei dati non è piccola che la mia app web deve caricare, diventa piuttosto lento alcune volte, quindi ho deciso di aggiungere alcune funzioni jQuery ajax per caricare determinati dati su richiesta e quindi salvarlo in una cache.Accettare le richieste get/post solo da localhost

Quello che mi piacerebbe sapere è come posso limitare le richieste di GET o POST solo da localhost/lo stesso server/lo stesso IP in modo da poter evitare chiamate dall'esterno alla mia app?

Ciò significa che le mie funzioni php che restituiscono dati, dovrebbero restituire i dati solo se richiesti da localhost.

La mia app Web viene eseguita sul framework di CodeIgniter e la configurazione del mio server Web è una LAMP in esecuzione su ubuntu.

Qualche idea?

risposta

22

nel costruttore si potrebbe usare

if ($_SERVER['SERVER_ADDR'] != $_SERVER['REMOTE_ADDR']){ 
    $this->output->set_status_header(400, 'No Remote Access Allowed'); 
    exit; //just for good measure 
} 

Tuttavia, se questo metodo è neanche quello che stai cercando .. utilizzare .htaccess è possibile eseguire una breve ricerca su Google per restituire un esempio specifico per negare get/post per tutto e quindi consentire 127.0.0.1/localhost.

+1

Si potrebbe desiderare di fare un'eccezione quando $ _SERVER [ 'SERVER_ADDR'] restituisce :: 1 – TheRealChx101

+3

Nota: è possibile falsificare REMOTE_ADDR http: // StackOverflow. it/questions/5092563/how-to-fake-serverremote-addr-variable –

10

L'utilizzo di .htaccess è probabilmente il modo migliore, consentire solo dal proprio indirizzo locale e 127.0.0.1. Ho trovato questo esempio a petergasser.com e lo cambiò solo leggermente:

AuthName "bla" 
AuthType Basic 
<Limit GET POST> 
order deny,allow 
deny from all 
allow from 127.0.0.1 
allow from <your-ip-here> 
</Limit> 
+0

È strano ... Mi viene proibito, forse un problema con la finestra mobile? IP diverso? –

+1

Non dovrebbe fare la differenza fintanto che sia Apache che l'applicazione che fa la richiesta si trovano sullo stesso host. Ovviamente devi assicurarti che apache stia ascoltando gli indirizzi IP in questione. – h00ligan

+0

Credo che la finestra mobile stia usando qualche altro IP come 172.18.0.3 o qualcosa del genere, non funziona. Ma se uso il mio indirizzo LAN in "consenti da", funziona. –

3

Utilizzare una chiave (si pensi di chiavi API) per inviare la richiesta insieme al server. Quindi sul tuo server si controlla quella chiave e se è quella giusta si restituiscono i dati.

+0

perché sarebbe un vantaggio rispetto alla soluzione di Mike's o h00ligan? – Alex

+0

Non ha vantaggio sulle altre soluzioni solo nel caso in cui si restituirebbero dati diversi in base alla provenienza della chiamata. – slash197

+0

Grazie a @ slash197, ma per ora rispetterò le soluzioni sopra menzionate. In ogni caso, hai qualche buon articolo in cui posso leggere qualcosa sulla tua soluzione? – Alex

2

Io uso come questo, grazie alla @gorelative

if( 
isset($_SERVER['REMOTE_ADDR']) AND ($_SERVER['REMOTE_ADDR'] !== $_SERVER['SERVER_ADDR']) 
){ 
die(' Access Denied, Your IP: ' . $_SERVER['REMOTE_ADDR']); 
} 
Problemi correlati