PHP-инъекция становится возможной, если входные параметры принимаются и используются без проверки. Напишем
простой php скрипт проверяющий входной параметр и реагирующий на него
определенным действием в зависимости от того что введено в входном
параметре. if (isset($_GET['to'])) { $to = $_GET['to']; if (strpbrk($to, '.?/:*<>')) die('символы ., ?, /, :, *, <, > в запросе запрещены'); else switch ($_GET['to']) { case "sitemap" : require_once("sitemap.php"); break; case "file" : require_once("file.php"); break; case "search" : require_once("search.php"); break; default : require_once("index.php"); break; }
} else require_once("index.php"); ?> Расмотрим его действие. 1. if (isset($_GET['to'])) - Функция isset
— определяет установлена ли переменная. если переменная пуста она
выполняет else require_once("index.php"); направляет на index.php 2.
if (strpbrk($to, '.?/:*<>')) die('символы ., ?, /, :, *, <,
> в запросе запрещены'); тут скрипт смотрит не введены ли ненужные,
иногда опасные символы(.?/:*<>) если да то выводит сообщение
"символы ., ?, /, :, *, <, > в запросе запрещены" 3. Если запрос миновал 1-ое и 2-ое то тогда функция switch ($_GET['to']) { case "sitemap" : require_once("sitemap.php"); break; case "file" : require_once("file.php"); break; case "search" : require_once("search.php"); break; default : require_once("index.php"); break; } проверяет
с помощью операторов case введены ли заданные значения("sitemap.php",
"file.php", "search.php") если нет то скрипт направляет на index.php