Глянул одним глазком недавно дабавленный скрипт strongcms. Увидел там систему "защиты" и чуть на подавился. Серьезно, ребята. Не надо так делать.
Речь пойдет об этом коде foreach ($_GET as $links) { if (!is_string($links) || !preg_match('#^(?:[a-z0-9_-/]+|.+(?!/))*$#i', $links)) { header ('Location: '.$HOME.''); exit; } }
Начнем с того, что чтобы вы не передали в $_GET - это ВСЕГДА будет строкой. Даже если это число. Поэтому проверка is_string бессмысленна.
Далее идет в цикле проверка по регуляному выражению. Не буду вдаваться в подробности, но при некоторых манипуляциях на своем сервере и благодаря этой проверке, если у вас не очень мощный хостинг, то можно отправить его в накаут (аля dos). Ну или вас тупо заблокирует админ хостинга.
Если вы хотите проверить на безопасность значения get параметров, то эффективнее и безопаснее делать это не с каждым отдельным параметром, а со всей строкой uri.
Этот код заменит то недаразумение if(!preg_match('#^[a-z0-9/-_.?&=]+$#iD', $_SERVER['REQUEST_URI'])){ header ('Location: '.$HOME.''); exit; }
Bymas сломал мой код) Но думаю сами сможите исправить ошибки
________ посл. ред. 08.05.2018 в 08:15; всего 2 раз(а); by Dark_AKC