Loading...
Обучение/Помощь новичкам | Безопасность. Не делайте так
Глянул одним глазком недавно дабавленный скрипт 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
Онлайн: 1
Время:
Gen. 0.0724
(c) Bym.Guru 2010-2026