
У меня в папке есть заголовок, нижний колонтитул и другие 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
или что-то подобное.