Open Redirects
1. Введение:
Небезопасные перенаправления и переадресации возможны, когда веб-приложение перенаправляет запрос на URL, заданный при помощи произвольного ввода. Изменив произвольный URL на вредоносный сайт, злоумышленник может успешно запустить фишинговую аферу, украсть учетные данные пользователя и многое другое.
2. Типичный уязвимый код:
Типичный уязвимый код принимает некоторый url-параметр, на который он перенаправляет пользователя.
<?php
...
$redirect_url = $_GET['url'];
header("Location: " . $redirect_url);
...
?>
3. Смягчение последствий
Правило, которое вы, вероятно, уже заметили, если прочитали все остальные темы, заключается в том, что каждый разработчик должен ВАЛИДИРОВАТЬ вводимые данные! Валидация и фильтрация ввода - это методы защиты от любого вида эксплуатации доступного пользователю ввода.
Однако в данном сценарии валидация ввода даже не нужна. Поскольку разработчик обычно знает, куда ему нужно перенаправить пользователя, больше нет необходимости в параметре url, который может быть использован. Мы можем просто зарубить его на корню :)
На вкладке Java следующего кирпичика кода вы найдете способ не хардкорить сам url, а сконструировать его вместо этого.
<?php
/* Redirect the browser. */
header("Location: http://www.bobi.io");
/* Exit to prevent the rest of the code from executing. */
exit;
?>
4. Выводы:
Безопасное использование перенаправлений и переадресаций может быть обеспечено несколькими способами:
Просто избегайте использования перенаправлений и переадресаций.
Если они используются, не допускайте ввода URL-адреса в качестве адресата пользователем.
Если пользовательского ввода не избежать, убедитесь, что вводимое значение действительно, подходит для приложения и авторизовано для пользователя.
Санируйте вводимые данные, создавая список доверенных URL (списки хостов или regex). Он должен быть основан на разрешающем, а не блокирующем списке.
Заставляйте все перенаправления сначала проходить через страницу, уведомляющую пользователей о том, что они уходят с вашего сайта, с четким указанием места назначения, и заставляйте их нажимать ссылку для подтверждения.
Last updated