Назад | Перейти на главную страницу

Конфигурация Nginx: что означают следующие строки

Может ли кто-нибудь объяснить причину добавления следующих строк в конфигурацию 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.