Блокировать доступ ко всем файлам на сайте, кроме index.htm в Nginx
У меня есть сайт только с одним файлом: index.htm
которые имеют некоторые AJAX, связанные с файлами PHP. Я хотел бы сделать эти php-файлы доступными только через ajax (post и get), поступающие из этого индексного файла, и заблокировать доступ ко всем файлам, кроме index.htm
, Возможно ли это в Nginx? Благодарю.
2 ответа
Решение
Две мысли:
- Модуль Nginx, который ограничивает реферер. Перечислите свой сайт и игнорируйте других или оставьте пустым: http://wiki.nginx.org/HttpRefererModule
- Другие возможные идеи: http://java.sun.com/developer/technicalArticles/J2EE/usingapikeys/
В конце концов, кто-то сможет добраться до них напрямую, подделав заголовки, но это только начало.
Примерно так будет работать:
location ~ \.php$ {
if ($http_referer !~* index\.htm) {
return 403;
}
fastcgi_pass 127.0.0.1:9000;
include fastcgi.conf;
fastcgi_intercept_errors on;
error_page 404 /error/404.php;
}
Помните, что этот заголовок легко подделать, например:
$ telnet localhost 81
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /pwd.php HTTP/1.0
HTTP/1.1 403 Forbidden
Server: nginx/1.0.5
Date: Thu, 20 Oct 2011 03:06:03 GMT
Content-Type: text/html
Content-Length: 168
Connection: close
$ telnet localhost 81
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /pwd.php HTTP/1.0
Referer: index.htm
HTTP/1.1 200 OK
Server: nginx/1.0.5
Date: Thu, 20 Oct 2011 03:06:38 GMT
Content-Type: text/html
Connection: close
/var/www/localhost/htdocs
$ curl localhost:81/pwd.php
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.0.5</center>
</body>
</html>
$ curl --referer index.htm localhost:81/pwd.php
/var/www/localhost/htdocs