PHP-CGI روش قدیمی‌تر اتصال PHP به Apache است. امشب در یک Clone نشان می‌دهیم فایل PHP چگونه از طریق Action به مفسر می‌رسد و چرا حفاظت اجرای مستقیم مفسر لازم است.

این جلسه بخشی از دورهٔ آپاچی در ۵۰ شب است. قرارداد نام‌ها، مسیرها و روش اعمال تغییر را در راهنمای دوره بخوان.

محیط: Clone Debian/Ubuntu بدون mod_php و handler FPM؛ ماژول‌های actions و cgid، PHP_BRANCH طبق راهنما.

مفسر و wrapper خصوصی#

sudo apt install "php${PHP_BRANCH}-cgi"
sudo a2enmod actions cgid
sudo install -d -m 755 /var/www/apache-lab/php-cgi

فایل root-owned به نام /var/www/apache-lab/php-cgi/run با حالت 755:

#!/bin/sh
exec /usr/bin/php-cgi

مسیر alternatives را با readlink -f /usr/bin/php-cgi بررسی کن. در فایل /etc/php/PHP_BRANCH/cgi/php.ini، پس از جایگزینی شمارهٔ شاخه، cgi.force_redirect = 1 و cgi.fix_pathinfo = 0 را تنظیم کن. force_redirect اجرای مستقیم مفسر خارج از هدایت موردانتظار وب‌سرور را محدود می‌کند؛ آن را برای ساکت کردن خطا خاموش نکن.

داخل میزبان HTTPS آزمایشگاهی:

ScriptAlias /php-cgi/ /var/www/apache-lab/php-cgi/
Action lab-php /php-cgi/run
<Directory /var/www/apache-lab/php-cgi>
    Options +ExecCGI -Indexes
    AllowOverride None
    Require ip 192.168.56.20
</Directory>
<Directory /var/www/apache-lab/public>
    AddHandler lab-php .php
</Directory>

Action یک handler را به URL داخلی CGI وصل می‌کند. AddHandler اینجا فقط فایل‌های .php زیر DocumentRoot آزمایشی را پوشش می‌دهد. پوشهٔ wrapper برای Apache خواندنی و اجراشدنی و برای کاربر runtime غیرقابل نوشتن بماند.

نتیجه و آزمون مسیر مستقیم#

فایل check.php شب قبل را بساز و از .20 درخواست بده. خروجی PHP-CGI معمولاً نام SAPI برابر cgi-fcgi دارد؛ این نام به‌تنهایی ثابت نمی‌کند فرایند ماندگار FastCGI ساخته‌ایم. درخواست مستقیم /php-cgi/run و مسیر ناموجود مانند /check.php/missing را هم آزمایش کن؛ نباید امکان انتخاب دلخواه فایل یا دانلود سورس ایجاد شود.

بازگشت: handler، Action و ScriptAlias را حذف و Snapshot را بازیابی کن. این مسیر برای شناخت و مهاجرت سامانه‌های موجود است؛ مسیر اصلی WordPress ما PHP-FPM با pool مستقل خواهد بود.

منبع: امنیت PHP-CGI ، mod_actions .