¿Cómo bloquear el acceso a una carpeta con archivos php para todos {deny:all;} en un servidor nginx PERO permitir llamadas ajax para acceder a los archivos de esa carpeta?

¿Cómo bloquear el acceso a una carpeta con archivos php para todos {deny:all;} en un servidor nginx PERO permitir llamadas ajax para acceder a los archivos de esa carpeta?

Tengo mi encabezado, pie de página y otros archivos php que procesan solicitudes ajax en la /include/carpeta.

Para un sitio web estático, se utiliza para configurar el archivo predeterminado de nginx en

location ^~ /include/ { deny all; }

Y cuando alguien fue hacia www.mysite.com/include/header.phpél devolvió un403 Forbidden

pero ahora, dado que uso llamadas jquery ajax a archivos dentro de la /include/carpeta, si configuro esto =>

location ^~ /include/ { deny all; }, nada de cosas ajax como guardar o informar funciona.

¿Hay alguna manera en la que puedanegar el acceso a los archivos internosla /include/carpeta atodos los demáspero hazloaccesible sólo para los archivos webroot?

Probé estos:

location ^~ /include/ { allow 127.0.0.1; deny all; }pero eso no funciona.

location ^~ /include/ { allow <my server's ip>; deny all; }pero eso no funciona.

He modificado el puerto ssh de 22 a 123; ¿Debo escribir:

location ^~ /include/ { allow 127.0.0.1:123; deny all; }¿en cambio?


También se remitió un tutorial para detener el hotlinking desde:http://www.nginxtips.com/how-to-stop-image-hotlinking-on-nginx/

Según eso: lo intenté,

location ~ .(gif|png|jpe?g)$ {
     valid_referers none blocked mysite.com *.mysite.com;
     if ($invalid_referer) {
     return   403;
    }
}

para evitar la vinculación directa de imágenes (no funcionó, supongo) y

location /include/ {
     valid_referers none blocked mysite.com *.mysite.com;
     if ($invalid_referer) {
     return   403;
    }
}

para impedir el acceso a la /include/carpeta.

Ninguno de ellos funcionó, y sí, reemplacé mysite por el nombre real de mi sitio web allí.

También intenté hacer esto:

 location ^~ /include/ {
         valid_referers none blocked mysite.com *.mysite.com;
         if ($invalid_referer) {
         return   403;
        }
    }

pero al agregarlo, en este caso ^~la página @ www.mysite.com/include/header.php'header.php' se descargó; al visitarlo en el navegador.

No estoy usando ningún CMS, solo archivos php simples usados ​​con css y js, incluido el de bootstap. (nginx 1.4.6, mysql, pila php5-fpm)

Cualquier sugerencia es muy apreciada.

Respuesta1

El servidor no es el que realiza las llamadas AJAX, sino el navegador del cliente, por lo que solo permitir que su servidor acceda a esa carpeta no hará lo que espera.

Mi sugerencia sería mover todos los archivos llamados a través de AJAX a una carpeta separada ( /ajaxtal vez) y dejar lo que haya configurado para la includecarpeta.

/includeEn teoría , un navegador nunca debería llamar directamente a los archivos internos , pero es probable que su lenguaje de programación los incluya (¡imagínelo!). Es por eso que los archivos solicitados por AJAX probablemente deberían ir en su propia carpeta.

Como alternativa, podrías reescribir las solicitudes AJAX en la /includecarpeta, pero no estoy seguro de si esto denyse aplicará en tales casos.

Respuesta2

Puede permitir el acceso según el X-Requested-With: XMLHttpRequestencabezado que la mayoría de los marcos de Javascript agregan a sus solicitudes AJAX, pero tenga en cuenta que cualquiera puede falsificar dicha solicitud; no puede estar seguro de que realmente sea una solicitud AJAX proveniente de su aplicación web y no de alguien que replica la solicitud AJAX. manualmente, utilizando curlo similar.

información relacionada