Глоссарий

Что такое открытый редирект: уязвимость, перенаправляющая пользователей с вашего доверенного URL на чужой сайт

Открытый редирект позволяет URL вашего сайта перенаправить посетителя на чужой сайт, что используют в фишинге. Как это работает и защита: allowlist редиректов.

Опубликовано 2026-06-10 Обновлено 2026-10-06 7 мин чтения
На этой странице

Открытый редирект — это когда URL, начинающийся с вашего настоящего домена, отправляет посетителя на совершенно другой сайт. Вот как он работает и как его надёжно предотвратить (без шагов атаки).

Почему это опасно

Главный вред — заимствование доверия к вашему домену.

Как злоупотребляютЧто происходит
Фишинг через ваш доменСсылка начинается с настоящего домена → пользователи и фильтры доверяют ей → переход на поддельный сайт
Перехват потока аутентификацииПодмена цели редиректа в потоках в стиле OAuth, чтобы перехватить токен/код
Усиление других баговВ сочетании с SSRF или XSS для расширения ущерба

Почему это работает

Это встречается в функциях вроде «вернуть пользователя туда, где он был, после входа», где URL возврата принимается на доверии и используется как есть. «Начало» URL, которое видит пользователь, — настоящий домен, поэтому усомниться до самого конца сложно.

realdomain/login?next= (начало вызывает доверие)
в next= подставлен внешний URL
↓ сайт перенаправляет, не проверяя цель
пользователь попадает на поддельный сайт, думая, что кликнул по настоящему = фишинг
Начало — настоящий домен, поэтому ему доверяют. Перенаправьте непроверенный внешний URL из параметра — и злоумышленники смогут использовать его для фишинга.

Защита: не принимайте внешние URL

1

Разрешайте только относительные пути (самое важное)

Принимайте цели возврата вроде /dashboard — только относительные пути — и отклоняйте полные URL (начинающиеся с http:// или //). Не оставляйте пользователю возможности задать домен назначения.

2

Сверяйте с allowlist

Если нужны динамические цели, разрешайте только записи из фиксированного набора известных назначений (карты). Всё остальное откатывается на страницу по умолчанию.

3

Не полагайтесь на проверки строк

//evil, обратные слеши, @ и многократное кодирование обходят наивные фильтры. Измените то, что вы принимаете (относительные пути + allowlist), вместо латания фильтров.

4

Если переход на внешний сайт необходим — сделайте его явным

Когда внешние редиректы задуманы намеренно, показывайте промежуточную страницу («Вы переходите на внешний сайт»). Не перенаправляйте молча.

Мнение этого сайта: сам по себе оценивается как «низкий», но серьёзен в сочетании с фишингом

Открытые редиректы часто оценивают как низкий риск сам по себе, но поскольку злоумышленники могут заимствовать доверие к вашему домену, в сочетании с фишингом или перехватом аутентификации они становятся серьёзными. Поэтому решение на уровне проектирования (относительные пути + allowlist) эффективно устраняет причину. Это перекликается с SSRF (заставить сервер соединиться куда угодно): оба разделяют принцип защиты — никогда не позволять пользователю решать, куда идти.

Открытый редирект, SSRF и фишинг

Открытый редирект — не столько атака сама по себе, сколько изъян, делающий другие атаки убедительнее. Рядом со смежными терминами видно его место.

ТерминЧто происходитКто исправляет
Открытый редиректURL на настоящем сайте перенаправляет браузер пользователя на внешний сайтРазработчики сайта с функцией редиректа
SSRFНе браузер, а сервер отправляет запрос по переданному ему адресуРазработчики сайта с функцией загрузки URL
ФишингПоддельный сайт заставляет вводить логины, пароли или данные картПользователи, получатели почты и организация, от имени которой действуют

Когда фишинговая ссылка может использовать настоящий домен, её труднее распознать и пользователям, и почтовым фильтрам. Устранив открытые редиректы, вы не дадите использовать свой домен в мошенничестве.

Пример: где это важнее всего — интеграции входа (OAuth)

Открытые редиректы важнее всего рядом с интеграциями входа (OAuth). После авторизации пользователя отправляют обратно на зарегистрированный redirect URI вместе с кодом авторизации или токеном. Если на сайте, куда он возвращается, есть открытый редирект, код или токен могут уйти дальше на внешний сайт.

Поэтому рекомендации по безопасности OAuth 2.0 (RFC 9700, январь 2025 г.) требуют двух вещей.

  • Сервер авторизации сравнивает redirect URI с заранее зарегистрированными по точному совпадению
  • Ни клиенты, ни серверы авторизации не держат страниц, перенаправляющих на произвольный URL из параметра запроса

Открытые редиректы классифицируются как CWE-601. Сами по себе они редко получают высокую оценку серьёзности, но рядом с интеграцией входа становятся серьёзной проблемой.

Насколько это серьёзно

Сам по себе открытый редирект обычно оценивается как средний. Часто встречающаяся оценка — CVSS 3.1 6.1.

  • Пользователь должен открыть ссылку (UI:R)
  • Последствие — отправка пользователей на другой сайт; прочитать данные сайта напрямую это не позволяет
  • Поскольку последствия выходят за пределы сайта с редиректом, это оценивается как изменение области (S:C)

Не откладывайте исправление из-за цифры. Исправляйте в первую очередь, если редирект находится на пути возврата интеграции входа или уже используется в фишинге. Чтобы оценить свой случай, воспользуйтесь калькулятором CVSS.

Безопасные помощники, которые уже есть в вашем фреймворке

Функции фреймворка реже упускают случаи, чем собственные проверки строк. Два распространённых примера:

ФреймворкПомощникЧто делает
Ruby on RailsПоведение redirect_to по умолчанию и url_fromПо умолчанию блокирует редиректы на другие хосты; чтобы отправить пользователя на внешний сайт, нужно явно указать allow_other_host: true. url_from возвращает URL, только если он на том же хосте, иначе nil
ASP.NET CoreLocalRedirect и Url.IsLocalUrlПеренаправляет только на URL в пределах того же сайта и выбрасывает исключение для внешнего URL

Документация Rails предупреждает, что даже с allow_other_host: true передавать параметр от пользователя напрямую небезопасно. Добавляя функцию внешнего редиректа, избегайте такого сочетания.

Как проверить свой сайт

1

Найдите параметры, принимающие назначение

Поищите в коде и списке URL параметры с именами вроде next, url, redirect, return_to, continue или callback и проверьте, не передаются ли они прямо в редирект.

2

Проверьте, как валидируются назначения

Посмотрите, не опирается ли проверка на сравнение префикса строки или «начинается ли с http». Вместо этого разбирайте URL парсером на схему, хост и порт и сверяйте с allowlist или используйте безопасные помощники фреймворка (например, LocalRedirect в ASP.NET Core).

3

Пересмотрите регистрации интеграций входа

В настройках OAuth или SSO проверьте, что в зарегистрированных redirect URI нет подстановочных знаков и старых ненужных URL.

4

Подумайте о выборе назначения по ID

Если внешний редирект необходим, принимайте короткий ID, а не сам URL, и ищите назначение в таблице на сервере. Такой подход рекомендует OWASP.

5

Ищите внешние редиректы в журналах доступа

Поищите в журналах доступа запросы, где параметр назначения содержит имя хоста, отличное от вашего. Если такие есть, проверьте, действительно ли этот редирект уводит людей на внешний сайт, и считайте это признаком того, что кто-то может распространять такие ссылки.

Источники (первичные)

  • OWASP, «Unvalidated Redirects and Forwards Cheat Sheet» — cheatsheetseries.owasp.org (ID с сопоставлением на сервере, проверка разобранных URL по allowlist, страницы предупреждения)
  • IETF RFC 9700, «Best Current Practice for OAuth 2.0 Security» (январь 2025 г.) — datatracker.ietf.org (точное совпадение redirect URI, запрет открытых редиректоров)
  • Ruby on Rails API, «ActionController::Redirecting» — api.rubyonrails.org (защита по умолчанию от редиректов на другие хосты, allow_other_host, url_from)
  • Microsoft, «Prevent open redirect attacks in ASP.NET Core» — learn.microsoft.com (LocalRedirect, IsLocalUrl, журналирование нелокальных URL)
  • MITRE, «CWE-601: URL Redirection to Untrusted Site ('Open Redirect')» — cwe.mitre.org

Читать дальше

Классификация

CWE классифицирует типы слабостей, из-за которых возникают уязвимости; MITRE ATT&CK классифицирует техники атакующих. Обе системы ведёт MITRE, и они широко используются для разметки уязвимостей и правил обнаружения.

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

FAQ

QПочему открытый редирект — это проблема?
A

Первый домен в URL — ваш настоящий, доверенный (например, страница входа), поэтому пользователи и почтовые фильтры уверенно кликают по ссылке. Но сайт перенаправляет их на любой внешний ресурс, и ваш настоящий домен можно использовать, чтобы фишинговые ссылки выглядели легитимными, а также для кражи токенов в потоках аутентификации.

QКакая защита главная?
A

Не принимайте внешние URL как цель редиректа. Для возврата после входа разрешайте только относительные пути (/dashboard) и сверяйте их с allowlist (фиксированным набором известных назначений). Если вам действительно нужно увести пользователя на сторонний сайт, покажите промежуточную страницу с предупреждением, что он покидает сайт.

QДостаточно ли проверки на http://?
A

Нет. Бессхемные формы (//evil.example), обратные слеши, кодирование и запутывающие URL с @ — всё это обходит наивные проверки. Вместо того чтобы судить о строке, проектируйте так, чтобы внешний URL вообще никогда не принимался (относительные пути + allowlist).

QЧто такое открытый редирект простыми словами?
A

Вы открываете ссылку на один сайт, а он сразу перебрасывает вас на любой другой сайт, указанный в URL. Так происходит потому, что часть, определяющую назначение (например, ?next=), можно свободно менять извне.

QКак настраивать redirect URI для OAuth и интеграций входа?
A

Сверяйте redirect URI (куда пользователь возвращается после авторизации) с заранее зарегистрированными значениями по точному совпадению. Рекомендации по безопасности OAuth 2.0 (RFC 9700, январь 2025 г.) требуют точного строкового сравнения и запрещают клиентам и серверам авторизации держать страницы, перенаправляющие браузер на произвольные URL (открытые редиректоры). Избегайте регистраций с подстановочными знаками или по префиксу.

QКак распознать это пользователю?
A

Смотрите на адресную строку после открытия страницы, а не на домен в начале ссылки. Когда у вас просят пароль или данные карты, перед вводом убедитесь, что домен в адресной строке настоящий. Если сомневаетесь, откройте сайт из закладки или официального приложения, а не по ссылке из письма.

QНасколько серьёзен открытый редирект? Какую оценку CVSS он получает?
A

Сам по себе он обычно оценивается как средний, потому что пользователь должен открыть ссылку, а последствия ограничены отправкой на другой сайт. Часто встречающаяся оценка — CVSS 3.1 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N). Но если он находится на пути возврата интеграции входа (OAuth), через него могут утечь коды или токены, и реальные последствия гораздо больше.

QЧем редирект отличается от форварда?
A

Редирект — это когда сервер говорит браузеру перейти на другой URL, и браузер сам его открывает. Форвард — когда сервер внутренне передаёт запрос другому обработчику, и URL в браузере не меняется. OWASP рассматривает оба: у редиректов проблема в отправке пользователей на внешние сайты, у форвардов — в обходе проверок доступа к административным функциям, которые не должны быть доступны.

QПроверка безопасности нашла открытый редирект. Что делать в первую очередь?
A

Не ограничивайтесь блокировкой одного указанного параметра. Составьте список всех мест, которые так же принимают назначение. Затем напишите одну общую функцию, которая принимает только относительные пути, и пропускайте через неё каждый редирект. Allowlist или страницу подтверждения используйте только там, где внешний редирект действительно нужен.