ืคื’ื™ืขื•ืช PHP-fpm ื”ืžืืคืฉืจืช ื‘ื™ืฆื•ืข ืงื•ื“ ืžืจื—ื•ืง ื‘ืฉืจืช

ื–ืžื™ืŸ ืžื”ื“ื•ืจื•ืช ืžืชืงื ื•ืช ืฉืœ PHP 7.3.11, 7.1.33 ื•-7.2.24, ืฉื‘ื”ืŸ ื—ื•ืกืœื• ืงืจื™ื˜ื™ ืคื’ื™ืขื•ืช (CVE-2019-11043) ื‘ืชื•ืกืฃ PHP-FPM (FastCGI Process Manager), ื”ืžืืคืฉืจ ืœืš ืœื‘ืฆืข ืžืจื—ื•ืง ืืช ื”ืงื•ื“ ืฉืœืš ื‘ืžืขืจื›ืช. ื›ื“ื™ ืœืชืงื•ืฃ ืฉืจืชื™ื ื”ืžืฉืชืžืฉื™ื ื‘-PHP-FPM ื‘ืฉื™ืœื•ื‘ ืขื Nginx ืœื”ืคืขืœืช ืกืงืจื™ืคื˜ื™ื ืฉืœ PHP, ื–ื” ื›ื‘ืจ ื–ืžื™ืŸ ืœืฆื™ื‘ื•ืจ ืขื•ื‘ื“ ืœึฐื ึทืฆึตืœ.

ื”ื”ืชืงืคื” ืืคืฉืจื™ืช ื‘ืชืฆื•ืจื•ืช nginx ืฉื‘ื”ืŸ ื”ืขื‘ืจื” ืœ-PHP-FPM ืžืชื‘ืฆืขืช ืขืœ ื™ื“ื™ ื”ืคืจื“ืช ื—ืœืงื™ื ืฉืœ ื›ืชื•ื‘ืช ื”ืืชืจ ื‘ืืžืฆืขื•ืช "fastcgi_split_path_info" ื•ื”ื’ื“ืจืช ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” PATH_INFO, ืืš ืžื‘ืœื™ ืœื‘ื“ื•ืง ืชื—ื™ืœื” ืืช ืงื™ื•ืžื• ืฉืœ ื”ืงื•ื‘ืฅ ื‘ืืžืฆืขื•ืช "try_files $fastcgi_script_name" ื”ื”ื•ืจืื” ืื• ื”-"if (!-f $) document_root$fastcgi_script_name)". ื”ื‘ืขื™ื” ื”ื™ื ื’ื ืžื•ืคื™ืข ื‘ื”ื’ื“ืจื•ืช ื”ืžื•ืฆืขื•ืช ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช NextCloud. ืœื“ื•ื’ืžื”, ืชืฆื•ืจื•ืช ืขื ืžื‘ื ื™ื ื›ืžื•:

ืžื™ืงื•ื ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

ืืชื” ื™ื›ื•ืœ ืœืขืงื•ื‘ ืื—ืจ ืคืชืจื•ืŸ ื”ื‘ืขื™ื” ื‘ืขืจื›ื•ืช ื”ืคืฆื” ื‘ื“ืคื™ื ื”ื‘ืื™ื: ื“ื‘ื™ืืŸ, ืจื”ืœ, ืื•ื‘ื•ื ื˜ื•, SUSE/openSUSE, FreeBSD, ืงืฉืช, ืคื“ื•ืจื”. ื›ื“ืจืš ืœืขืงื™ืคืช ื”ื‘ืขื™ื”, ืชื•ื›ืœ ืœื”ื•ืกื™ืฃ ื‘ื“ื™ืงื” ืœืงื™ื•ืžื• ืฉืœ ืงื•ื‘ืฅ ื”-PHP ื”ืžื‘ื•ืงืฉ ืœืื—ืจ ื”ืฉื•ืจื” "fastcgi_split_path_info":

try_files $fastcgi_script_name =404;

ื”ื‘ืขื™ื” ื ื’ืจืžืช ืžืฉื’ื™ืื” ื‘ืขืช ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ืžืฆื‘ื™ืขื™ื ื‘ืงื•ื‘ืฅ sapi/fpm/fpm/fpm_main.c. ื‘ืขืช ื”ืงืฆืืช ืžืฆื‘ื™ืข, ื”ื”ื ื—ื” ื”ื™ื ืฉื”ืขืจืš ืฉืœ ืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” PATH_INFO ื—ื™ื™ื‘ ืœื”ื›ื™ืœ ืงื™ื“ื•ืžืช ื”ืชื•ืืžืช ืืช ื”ื ืชื™ื‘ ืœืกืงืจื™ืคื˜ PHP.
ืื ื”ื”ื ื—ื™ื” fastcgi_split_path_info ืžืฆื™ื™ื ืช ืคื™ืฆื•ืœ ื ืชื™ื‘ ื”ืกืงืจื™ืคื˜ ื‘ืืžืฆืขื•ืช ื‘ื™ื˜ื•ื™ ืจื’ื•ืœืจื™ ืจื’ื™ืฉ ืœืฉื•ืจืช ื—ื“ืฉื” (ืœื“ื•ื’ืžื”, ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช ืžืฆื™ืขื•ืช ืฉื™ืžื•ืฉ ื‘-"^(.+?\.php)(/.*)$"), ืื– ืชื•ืงืฃ ื™ื•ื›ืœ ืœื”ื‘ื˜ื™ื— ืฉ- ื”ืขืจืš ื”ืจื™ืง ื ื›ืชื‘ ืœืžืฉืชื ื” ื”ืกื‘ื™ื‘ื” PATH_INFO. ื‘ืžืงืจื” ื–ื”, ื‘ื”ืžืฉืš ื”ื‘ื™ืฆื•ืข ื”ื•ื ื›ื•ืชื‘ path_info[0] ืœืืคืก ื•ืงื•ืจื ืœ-FCGI_PUTENV.

ืขืœ ื™ื“ื™ ื‘ืงืฉืช ื›ืชื•ื‘ืช URL ืžืขื•ืฆื‘ืช ื‘ืฆื•ืจื” ืžืกื•ื™ืžืช, ืชื•ืงืฃ ื™ื›ื•ืœ ืœื”ืฉื™ื’ ื”ืกื˜ื” ืฉืœ โ€‹โ€‹ืžืฆื‘ื™ืข path_info ืœื‘ื™ื™ื˜ ื”ืจืืฉื•ืŸ ืฉืœ ื”ืžื‘ื ื” "_fcgi_data_seg", ื•ื›ืชื™ื‘ืช ืืคืก ืœื‘ื™ื™ื˜ ื–ื” ืชื•ื‘ื™ืœ ืœืชื ื•ืขื” ืฉืœ ื”-"char* pos" ืžืฆื‘ื™ืข ืœืื–ื•ืจ ื–ื™ื›ืจื•ืŸ ืฉื ืžืฆื ื‘ืขื‘ืจ. ื”ื‘ื ืฉื ืงืจื FCGI_PUTENV ื™ื—ืœื™ืฃ ืืช ื”ื ืชื•ื ื™ื ื‘ื–ื™ื›ืจื•ืŸ ื–ื” ืขื ืขืจืš ืฉื”ืชื•ืงืฃ ื™ื›ื•ืœ ืœืฉืœื•ื˜ ื‘ื•. ื”ื–ื™ื›ืจื•ืŸ ืฉืฆื•ื™ืŸ ืžืื—ืกืŸ ื’ื ืืช ื”ืขืจื›ื™ื ืฉืœ ืžืฉืชื ื™ FastCGI ืื—ืจื™ื, ื•ืขืœ ื™ื“ื™ ื›ืชื™ื‘ืช ื”ื ืชื•ื ื™ื ืฉืœื”ื, ืชื•ืงืฃ ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืฉืชื ื” PHP_VALUE ืคื™ืงื˜ื™ื‘ื™ ื•ืœื”ืฉื™ื’ ื‘ื™ืฆื•ืข ืฉืœ ื”ืงื•ื“ ืฉืœื•.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”