Перейти к содержимому
>_ITDITDПлатформа веб-безопасности

Глоссарий

Что такое открытый редирект — ваш доверенный URL как трамплин на чужой сайт

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

Опубликовано 2026-06-10 Обновлено 2026-06-10 3 мин чтения

«Начало 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 (заставить сервер соединиться куда угодно): оба разделяют принцип защиты — никогда не позволять пользователю решать, куда идти.

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

FAQ

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

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

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

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

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

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