2012-03-26 29 views
15

Como el tamaño de los datos no es pequeño que mi aplicación web necesita para cargar, algunas veces se vuelve bastante lento, por lo que decidí agregar algunas funciones jQuery ajax para cargar ciertos datos a pedido y luego guárdalo en un caché.Aceptando solicitudes get/post solo de localhost

Lo que me gustaría saber es ¿cómo puedo limitar las solicitudes GET o POST solo desde localhost/mismo servidor/mismo IP para poder evitar cualquier llamada desde el exterior a mi aplicación?

Eso significa que mis funciones php que devuelven datos, deben devolver datos solo si se solicitan desde localhost.

Mi aplicación web se ejecuta en el marco de CodeIgniter y la configuración de mi servidor web es un LAMP que se ejecuta en ubuntu.

¿Alguna idea?

Respuesta

22

en el constructor se puede utilizar

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

Sin embargo, si este método isnt lo que estás buscando .. utilizar .htaccess puede realizar una rápida búsqueda en Google para devolver un ejemplo específico para negar GET/POST a todo y luego permitir 127.0.0.1/localhost.

+1

Es posible que desee hacer una excepción cuando $ _SERVER [ 'SERVER_ADDR'] devuelve :: 1 – TheRealChx101

+3

Nota: Puede remote_addr falso http: // stackoverflow. com/questions/5092563/how-to-fake-serverremote-addr-variable –

10

Usar .htaccess es probablemente la mejor manera, permitir solo desde su dirección local y 127.0.0.1. me encontré con este ejemplo a petergasser.com y lo cambió sólo ligeramente:

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

Eso es raro ... me está prohibido, tal vez un problema con Docker? ¿Diferente ip? –

+1

No debería marcar la diferencia, siempre que tanto apache como la aplicación que realiza la solicitud estén en el mismo host. Por supuesto, debe asegurarse de que apache esté escuchando las direcciones IP en cuestión. – h00ligan

+0

Creo que Docker está usando alguna otra ip como 172.18.0.3 o algo así, no funciona. Pero si uso mi dirección LAN en "permitir desde", funciona. –

3

Utilice una llave (pensar en claves API) para enviar la solicitud junto con su servidor. Luego, en su servidor, comprueba esa clave y, si es la correcta, devuelve datos.

+0

¿por qué sería una ventaja sobre la solución de Mike o h00ligan? – Alex

+0

No tiene ventaja sobre las otras soluciones solo en el caso en que devuelva datos diferentes según el origen de la llamada. – slash197

+0

Gracias @ slash197 pero voy a seguir con las soluciones mencionadas anteriormente por ahora. De todos modos, ¿tiene algún buen artículo donde pueda leer algo sobre su solución? – Alex

2

utilizo como éste, gracias a @gorelative

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