Может ли кто-нибудь объяснить причину добавления следующих строк в конфигурацию Nginx при использовании с php-fpm
location ~ \..*/.*\.php$ {
return 403;
}
Спасибо.
Вам лучше почитать о регулярное выражение чтобы понять это. Приведенная выше конфигурация означает, что запрос начинается с точки, за которой следуют любые символы, затем косая черта и заканчивается чем-то .php будет запрещен, например:
http://domain.com/.abc/def.php
$ telnet localhost 81
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /.abc/def.php HTTP/1.0
HTTP/1.1 403 Forbidden
Server: nginx/1.0.5
Date: Wed, 19 Oct 2011 15:09:58 GMT
Content-Type: text/html
Content-Length: 168
Connection: close
Есть несколько длинных тем о cgi.fix_pathinfo = 1
и почему это проблема безопасности на платах nginx, в двух словах, без этого правила в настройках по умолчанию можно замаскировать файл, отличный от php (например, .jpg
) как php и заставить сервер обработать код вредоносного файла.
Drupal, Wordpress, Squirrel и т. Д. Передают свои параметры скриптам через такие запросы, как /index.php?q=user/login
[или пользователь: логин]. Обычно он скрыт в URL-адресе (очистка / маскирование), но так работает.
Если вы используете CGI для передачи запроса на бэкэнд, вам необходимо передать его в параметре PATH_INFO. Разработчики php включили функцию (тупо включенную по умолчанию), которая использует это.
Это приводит к проблемам безопасности с наиболее распространенными настройками Nginx. Кто-то загружает на ваш сервер вредоносный файл php, скажем, с расширением jpg. Затем они идут в http://server.com/sites/server.com/files/mybadfile.jpg/whatever.php
Потому что это заканчивается .php
общие конфигурации nginx просто передают его в бэкэнд php как SOMESCRIPT whatever.php
. Из-за cgi.fix_pathinfo = 1
, PHP "исправляет" запрос, изменяя его на SOMESCRIPT mybadfile.jpg
и PATH_INFO /whatever.php
и выполняет mybadfile.jpg
как скрипт php.
Остальное вы можете себе представить.
регулярное выражение означает, что любой прямой запрос к любому файлу в любом подкаталоге должен быть запрещен [return 403], если файл заканчивается на .php
[часть .php $, где $ показывает конец строки, независимо от того, что на ней заканчивается]
чтобы понять это или регулярные выражения в целом, вам, вероятно, следует поискать документацию nginx или регулярные выражения в целом
Посмотреть здесь: http://forum.nginx.org/read.php?2,88845,88996
Короче говоря, в некоторых настройках кто-то мог загрузить вредоносный файл (JPG или что угодно) и обработать его PHP.