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