Можливі атаки
Використання PHP як бінарного CGI-Програми є одним з варіантів, коли з яких-небудь причин небажано інтегрувати PHP у веб-сервер (наприклад, Apache) як модуль, або передбачається використання різних CGI-обгорток та таких утиліт, як chroot та setuid для організації безпечного оточення роботи скриптів. Така установка зазвичай супроводжується копіюванням виконуваного файлу PHP до директорії cgi-bin веб-сервера. CERT (організація, яка стежить за загрозами безпеці) » CA-96.11 рекомендує не поміщати будь-які інтерпретатори до каталогу cgi-bin. Навіть якщо PHP використовується як самостійний інтерпретатор, він спроектований так, щоб запобігти можливості наступних атак:
- Доступ до системних файлів:http://my.host/cgi-bin/php?/etc/passwdДані, введені в рядку запиту (URL) після знака запитання, передаються інтерпретатору як аргументи командного рядка за допомогою інтерфейсу CGI. Зазвичай інтерпретатори відкривають та виконують файл, вказаний як перший аргумент. У разі використання PHP як CGI-додатка він не буде інтерпретувати аргументи командного рядка.
- Доступ до довільного документа на сервері:http://my.host/cgi-bin/php/secret/doc.mdВідповідно до загальноприйнятої угоди, частина шляху в запитаній сторінці, яка розташована після імені модуля PHP, /secret/doc.md, використовується для вказівки файлу, який буде інтерпретований CGI-програмою. Зазвичай, деякі параметри конфігурації веб-сервера (наприклад, Action для сервера Apache) використовуються для перенаправлення документа, наприклад, для перенаправлення запитів видуhttp://my.host/secret/script.phpінтерпретатор PHP. У такому разі веб-сервер спочатку перевіряє права доступу до директорії /secret, і після цього створює перенаправлений запитhttp://my.host/cgi-bin/php/secret/script.php. На жаль, якщо запит спочатку задано у повному вигляді, перевірка на наявність прав для файлу /secret/script.php не виконується, вона відбувається лише для файлу /cgi-bin/php. Таким чином, користувач може звернутися до /cgi-bin/php, і, як наслідок, до будь-якого захищеного документа на сервері. Якщо в PHP вказати під час виконання скрипту опціїcgi.force_redirect doc_root і user_dir, то можна запобігти подібним атакам для директорій з обмеженим доступом. Більш детально наведені опції та їх комбінації будуть розглянуті нижче.