nginx + php-fpm

Anton Kiryushkin swood at fotofor.biz
Thu Apr 11 11:34:52 UTC 2013


Максим, спасибо за ответ.

Если вы про определение переменной $script, то даже если от него отказаться
и использовать штатную переменную $fastcgi_script_name, то от этого то, к
ему обращается nginx не меняется. Для меня остается вопросом, почему
игнорируется / в пути, то есть почему nginx обращается к файлу:
/ff9cf78666f326226e5328cd01e82e53804d7a44.png/.php
А не к :
/.php

Что же до ничего не считает, то это абсолютно понятно и к этому вопросов
нет.


11 апреля 2013 г., 15:17 пользователь Maxim Dounin <mdounin at mdounin.ru>написал:

> Hello!
>
> On Thu, Apr 11, 2013 at 02:11:18PM +0400, Anton Kiryushkin wrote:
>
> > Всем добрый день
> >
> > Возможно это боян и только я не знаю как так получается. Но столкнулся с
> > интересной вещью.
> > Есть сайт, туда пользователи могут загружать картинки. И загружают. Но,
> > если вместо картинки, под видом картинки, они загрузят php-код, то,
> > казалось бы, и черт с ним. Сервер его не обработает. Но нашли ведь лаз
> > обращаться к файлу так:
> > ff9cf78666f326226e5328cd01e82e53804d7a44.png/.php
> >
> > В location nginx прописано тоже вроде бы корректно:
> >
> >        location ~ "^(.+\.php)($|/)" {
> >                 set $script $uri;
> >                 if ($uri ~ "^(.+\.php)($|/)") {
> >                         set $script $1;
> >                 }
> >                 if ($uri ~ "^(.+\.php)(/.+)") {
> >                         set $script $1;
> >                 }
> >                fastcgi_index  index.php;
> >                 fastcgi_split_path_info         ^(.+\.php)(.*)$;
> >                 fastcgi_param  PATH_INFO        $fastcgi_path_info;
> >                 fastcgi_pass   fpm-backend;
> >                 include fastcgi_params;
> >                 fastcgi_param SCRIPT_NAME $script;
> >                 fastcgi_param  SCRIPT_FILENAME
> >  $document_root$fastcgi_script_name;
> > }
> >
> > То есть все, что оканчивается на .php. Соблюдается. Но ведь файла нет. Я
> > имею ввиду ".php". Почему nginx считает файлом
> > ff9cf78666f326226e5328cd01e82e53804d7a44.png/.php, ведь тут есть обычный
> > слэш?
>
> Потому что nginx вообще ничего не считает, файла вообще может не
> быть, или он может быть на другой машине.  Если вы хотите, чтобы
> nginx проверял существование файла, то добавьте try_files - и будет
> проверять.
>
> В данном случае, однако, правильное решение - это не городить
> костыли в nginx'е, а исправить поведение php, чтобы он открывал
> ровно то, что сказали, а не пытался придумать правильное имя файла
> сам.  AFAIK, выключить cgi.fix_pathinfo - помогает.
>
> --
> Maxim Dounin
> http://nginx.org/en/donation.html
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru




-- 
Best regards,
Anton Kiryushkin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20130411/fb7a051a/attachment.html>


Подробная информация о списке рассылки nginx-ru