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

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

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

location ^~ /include/ { deny all; }

И когда кто-то перешел в www.mysite.com/include/header.php это возвратило a 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' в этом случае, будучи downloded; при посещении его в браузере.

Я не использую CMS, просто php файлы, используемые с CSS и js, incl CSS bootstap's. (nginx 1.4.6, mysql, php5-fpm стек)

Любые предложения очень ценятся.

0
задан 6 October 2015 в 17:32
2 ответа

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

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

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

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

0
ответ дан 24 November 2019 в 08:00

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

0
ответ дан 24 November 2019 в 08:00

Теги

Похожие вопросы