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@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru