Fil-qosor: CGI (Common Gateway Interface) huwa interface antika li fiha s-server tal-web jibda programm ġdid għal kull talba, ma' PHP il-programm php-cgi. FastCGI huwa l-iżvilupp ulterjuri: il-proċessi ta' PHP jaħdmu b'mod permanenti u jirċievu ħafna talbiet permezz ta' socket. PHP-FPM hija l-aktar implimentazzjoni importanti ta' FastCGI għal PHP. Rilevanti għas-sigurtà huma fuq kollox is-settings cgi.* u r-regola li aċċess FastCGI ma jistax qatt jintlaħaq pubblikament.
X'inhu CGI?
CGI huwa wieħed mill-eqdem metodi li bihom is-servers tal-web joħolqu kontenut dinamiku. Il-manwal ta' PHP jirreferi, fis-setting cgi.rfc2616_headers, għal RFC 3875, l-ispeċifikazzjoni tal-Common Gateway Interface. Anki l-bidu ta' PHP kien programmi CGI: Rasmus Lerdorf kiteb fl-1994 l-ewwel „Personal Home Page Tools“ bħala fajls binarji CGI bl-C.
Il-prinċipju: għal kull talba s-server tal-web jibda proċess ġdid, jgħaddi d-dejta tat-talba permezz ta' varjabbli tal-ambjent u l-input standard u jaqra t-tweġiba mill-output standard. Wara l-proċess jintemm. Skont il-manwal ta' PHP, ma' CGI u CLI PHP terġa' taqra l-php.ini tagħha ma' kull sejħa, ma' moduli tas-server biss meta tibda.
Dan jagħmel lil CGI robust, għax kull talba tibda b'proċess frisk. Imma jagħmlu wkoll bil-mod: il-bidu tal-proċess, it-tagħbija tal-konfigurazzjoni u l-inizjalizzazzjoni tal-estensjonijiet jieklu ħin ma' kull talba.
X'inhu FastCGI?
FastCGI isolvi l-problema tal-prestazzjoni billi l-proċessi jibqgħu ħajjin. Is-server tal-web jikkonnettja permezz ta' Unix socket jew port TCP ma' proċess li jkun qed jaħdem u jibgħatlu t-talba fil-protokoll FastCGI. Il-proċess jipproċessaha u jistenna t-talba li jmiss.
| Karatteristika | CGI | FastCGI b'php-cgi | FastCGI b'PHP-FPM |
|---|---|---|---|
| Proċess għal kull talba | iva | le | le |
| Isem tal-SAPI | cgi-fcgi |
cgi-fcgi |
fpm-fcgi |
| Pools b'utent proprju | le | le | iva |
| Kontroll tal-proċessi | server tal-web | modulu tas-server tal-web, pereżempju mod_fcgid | proċess master proprju |
.user.ini jinqara |
iva | iva | iva |
PHP-FPM huwa, skont il-manwal, l-implimentazzjoni primarja ta' FastCGI ta' PHP. Iżid mal-protokoll amministrazzjoni tal-proċessi, pools, paġni tal-istatus u slowlog. Id-dettalji jinsabu taħt PHP-FPM spjegat.
Is-settings tal-cgi fil-php.ini
Għat-tħaddim CGI, PHP għandha settings proprji. Il-valuri u d-deskrizzjonijiet li ġejjin joħorġu mill-manwal ta' PHP:
cgi.force_redirect(standard 1,INI_SYSTEM): skont il-manwal meħtieġ biex PHP titħaddem b'mod sigur bħala CGI taħt il-biċċa l-kbira tas-servers tal-web. Tintefa „bir-riskju tiegħek“ biss; taħt IIS irid ikun mitfi.cgi.fix_pathinfo(standard 1,INI_SYSTEM): jipprovdi valuri korretti ta'PATH_INFOuPATH_TRANSLATED. L-iskripts għandhom jużawSCRIPT_FILENAMEminflokPATH_TRANSLATED.cgi.discard_path(standard 0,INI_SYSTEM): jippermetti li l-fajl binarju CGI jitpoġġa b'mod sigur barra mid-direttorju tal-web, mingħajr ma tista' tiġi evitata l-protezzjoni ta'.htaccess.fastcgi.impersonate(standard 0,INI_SYSTEM): rilevanti biss għal IIS taħt Windows.user_ini.filenameuuser_ini.cache_ttl(standard.user.iniu 300 sekonda): jikkontrollaw jekk u kemm-il darba PHP taqra fajls.user.ini.
Ma' Nginx jappartjeni hawnhekk trasferiment nadif tal-mogħdija tal-iskrip. Mudell bażiku li jinqara, mingħajr garanzija għal kull ambjent:
location ~ \.php$ {
try_files $uri =404; # agħti lil PHP biss fajls eżistenti
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Il-linja try_files $uri =404; jipprevjeni li talbiet għal mogħdijiet .php li ma jeżistux jiġu mgħoddija lil PHP.
Għaliex aċċess FastCGI miftuħ huwa perikoluż
Il-manwal ta' PHP iwissi espliċitament: min jista' jiftaħ konnessjoni FastCGI ma' PHP jikkontrolla l-konfigurazzjoni tat-talba, pereżempju auto_prepend_file, u b'hekk jista' jesegwixxi kodiċi arbitrarju. Ir-raġuni hi li s-servers tal-web jistgħu jibagħtu settings ta' PHP permezz ta' parametri FastCGI bħal PHP_VALUE u PHP_ADMIN_VALUE.
Minn dan jinqalgħu regoli ċari:
- Qabbdu PHP-FPM jew php-cgi f'modalità FastCGI permezz ta' Unix socket biss, jekk is-server tal-web jaħdem fuq l-istess host.
- Ma' TCP issettjaw
listen.allowed_clientsu ssakkru l-port fil-firewall; indikazzjonijiet dwar dan fl-artikolu Firewall għas-servers tal-web. - Żommu d-drittijiet tas-socket stretti b'
listen.owner,listen.groupulisten.mode.
Ivverifikaw b'ss -lntp | grep -i php jekk proċess ta' PHP huwiex jilqa' konnessjonijiet fuq indirizz TCP. Rabta ma' 0.0.0.0 jew ma' indirizz pubbliku hija każ ta' azzjoni urġenti.
CGI, FastCGI u PHP2Shell
Kemm php-cgi kif ukoll PHP-FPM huma affettwati minn PHP2Shell. Għat-tnejn japplika: aġġornament għal 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 jew backport ikkonfermat, imbagħad itemmu u erġgħu ibdew il-proċessi kollha ta' PHP li jkunu qed jaħdmu. Ma' setups FastCGI b'php-cgi l-proċessi spiss ikomplu jaħdmu mingħajr ma wieħed jinduna, għax ebda servizz proprju ma jamministrahom. Kif issibu u tneħħu dan il-wirt qadim jinsab taħt php-cgi: wirt qadim b'riskju. Fi Plesk il-varjanti għandhom ismijiet differenti; l-għajnuna tagħti Plesk: nifhmu l-handlers ta' PHP.
Kif jgħin PHP SOS konkretament?
- Niġbru l-handlers: Niddeterminaw jekk il-websajts tagħkom jaħdmux permezz ta' CGI, FastCGI b'php-cgi jew PHP-FPM.
- Nagħlqu l-aċċessi: Nivverifikaw sockets, ports u regoli tal-firewall, biex ebda aċċess FastCGI ma jintlaħaq minn barra.
- Nippatchjaw u nnaddfu: Naġġornaw PHP u ntemmu l-proċessi qodma kollha, anki istanzi orfni ta' php-cgi.
- Nissostitwixxu: Fil-qafas tal-tisħiħ tas-server nissostitwixxu l-wirt qadim CGI b'PHP-FPM b'pools proprji.
Mistoqsijiet frekwenti
FastCGI huwa l-istess bħal PHP-FPM?
Le. FastCGI huwa protokoll li permezz tiegħu server tal-web jitkellem ma' proċess ta' applikazzjoni. PHP-FPM huwa programm li jimplimenta dan il-protokoll għal PHP u jamministra l-proċessi. Anki php-cgi jista' jitkellem FastCGI, imma ma joffrix pools.
Għaliex CGI pur jitqies skadut?
Ma' CGI s-server tal-web jibda proċess ġdid għal kull talba, u PHP taqra l-konfigurazzjoni tagħha kull darba. Dan jiswa ħin u riżorsi. FastCGI u PHP-FPM iżommu proċessi lesti b'mod permanenti u għalhekk huma ferm aktar effiċjenti.
X'inhu .user.ini?
Fajl .user.ini huwa fajl żgħir tal-konfigurazzjoni f'direttorju tal-web. Skont il-manwal ta' PHP, jinqara biss mill-SAPIs CGI u FastCGI, jiġifieri wkoll minn PHP-FPM. Jista' jkun fih biss settings bil-modalitajiet INI_PERDIR, INI_USER jew INI_ALL.
Kif nagħraf jekk fuq is-server tiegħi jaħdimx php-cgi?
Fittxu b'kmandi għall-qari biss bħal ps jew pgrep proċessi bl-isem php-cgi u fil-konfigurazzjoni tas-server tal-web ħarsu lejn entrati bħal mod_fcgid, Action jew ScriptAlias b'php-cgi. Fil-panels tal-hosting il-modalità tat-tħaddim spiss tissejjaħ CGI jew applikazzjoni FastCGI.