Как заблокировать доступ к папке с файлами PHP для всех {deny:all;} на сервере nginx, НО разрешить вызовам ajax доступ к файлам в этой папке?

Как заблокировать доступ к папке с файлами PHP для всех {deny:all;} на сервере nginx, НО разрешить вызовам ajax доступ к файлам в этой папке?

У меня в папке есть заголовок, нижний колонтитул и другие php-файлы, которые обрабатывают ajax-запросы /include/.

Для статического веб-сайта используется для установки файла nginx по умолчанию

location ^~ /include/ { deny all; }

И когда кто-то пошел к www.mysite.com/include/header.phpнему, он вернулся403 Forbidden

но теперь, поскольку я использую вызовы jquery ajax для файлов внутри папки /include/, если я установлю это =>

location ^~ /include/ { deny all; }, никакие функции AJAX, такие как сохранение или создание отчетов, не работают.

есть ли способ, которым я мог бызапретить доступ к файлам внутрипапка /include/длявсе остальныено сделай этодоступно только для файлов webroot?

Я попробовала эти:

location ^~ /include/ { allow 127.0.0.1; deny all; }но это не работает.

location ^~ /include/ { allow <my server's ip>; deny all; }но это не работает.

Я изменил порт ssh с 22 на, скажем, 123; следует ли мне ввести:

location ^~ /include/ { allow 127.0.0.1:123; deny all; }вместо?


Также дана ссылка на руководство по прекращению хотлинкинга:http://www.nginxtips.com/how-to-stop-image-hotlinking-on-nginx/

Согласно этому: я пытался,

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

для предотвращения хотлинкинга изображений (не сработало, я полагаю) и

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

для предотвращения доступа к /include/папке.

ни один из них не сработал, и да, я заменил там mysite на настоящее имя моего сайта

Я также попробовал сделать это:

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

Однако добавление ^~привело к тому, что в данном случае страница @ www.mysite.com/include/header.php'header.php' была загружена при посещении ее в браузере.

Я не использую никаких CMS, только простые php-файлы, используемые с css и js, включая bootstap. (nginx 1.4.6, mysql, стек php5-fpm)

Любые предложения будут высоко оценены.

решение1

Вызовы AJAX выполняет не сервер, а браузер клиента, поэтому предоставление доступа к этой папке только вашему серверу не даст того, чего вы ожидаете.

Я бы предложил переместить все файлы, вызываемые через AJAX, в отдельную папку ( /ajaxвозможно) и оставить то, что вы настроили для этой includeпапки.

Теоретически файлы внутри /includeне должны напрямую вызываться браузером, но, скорее всего, будут включены (представьте себе!) вашим языком сценариев. Вот почему файлы, запрошенные AJAX, скорее всего, должны находиться в своей собственной папке.

В качестве альтернативы вы могли бы переписать AJAX-запросы к папке /include, но я не уверен, denyбудет ли это применимо в таких случаях.

решение2

Вы можете разрешить доступ на основе X-Requested-With: XMLHttpRequestзаголовка, который большинство фреймворков Javascript добавляют к своим запросам AJAX, но учтите, что подделать такой запрос может кто угодно — вы не можете быть уверены, что это действительно запрос AJAX, исходящий от вашего веб-приложения, а не кто-то вручную копирует запрос AJAX, используя curlили что-то подобное.

Связанный контент