Требования: Недавно я прочитал документ Microsoft ASP.NET Core «Предотвращение открытых редиректных атак в ASP.NET Core», что примерно означаетРазработчикам следует обращать внимание на маршрут локального сайта при переходе к адресу обратного вызова, чтобы некоторые люди не могли злонамеренно подделывать этот адрес для фишинговых атак。 Изучите код и подготовьтесь к переносу его на проект ASP.NET MVC.
Я помню, что у крупного производителя была такая уязвимость, и некоторые использовали её, чтобы отводить трафик из QQ и WeChat, следующим образом:
Используя уязвимость, некоторые чат-инструменты не смогли помешать пользователям кликать по ссылкам для доступа к вредоносному контенту сайта из-за доверия к доменам крупных компаний.
Что такое открытая перенаправленная атака?
Веб-приложения часто перенаправляют пользователей на страницы входа, когда они получают доступ к ресурсам, требующим аутентификации. Перенаправления обычно включают параметр запроса returnUrl, чтобы пользователи могли вернуться к первоначально запрошенному URL после успешного входа. После аутентификации пользователь перенаправляется на изначально запрошенный URL.
Пример атаки
Злоумышленник может разработать атаку, направленную на то, чтобы дать злоумышленнику доступ к учетным данным пользователя или конфиденциальной информации. Чтобы начать атаку, злоумышленник обманывает пользователя, заставив его кликнуть по ссылке на целевой страницу вашего сайта и добавить значение запроса returnUrl к этому URL. для того, чтобыcontoso.comнапример, приложение находится вhttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutСодержит целевой страницу. Атака следует следующим шагам:
- Пользователь переходит по вредоносной ссылке наhttp://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(Второй URL — "contoso1.com", вместо "contoso.com”) 。
- Пользователь успешно входит в систему.
- Пользователь перенаправляется на сайтhttp://contoso1.com/Account/LogOn(Вредоносный сайт, который выглядит точно так же, как настоящий).
- Пользователь снова входит в систему (предоставляя учетные данные вредоносному сайту) и перенаправляется обратно на реальный сайт.
- Пользователи могут думать, что первая попытка входа провалилась, а вторая — успешной.Вероятно, пользователи до сих пор не знают, что их учетные данные были скомпрометированы。
Помимо лендинговых страниц, некоторые сайты предлагают страницы перенаправления или эндпоинты. Допустим, в вашем приложении есть страница с открытым перенаправлением /Home/Redirect. Например, злоумышленник может создать определённую точку в письме[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginсвязь. Обычные пользователи увидят, что URL начинается с названия вашего сайта. Из чувства доверия они переходят по ссылке. Открытые перенаправления затем направляют пользователей на фишинговые сайты, которые выглядят так же, как ваши, и пользователи могут войти на сайты, которые считают вашими.
Предотвращение открытых перенаправленных атак
При разработке веб-приложений все пользовательские данные считаются ненадёжными. Если ваше приложение может перенаправлять пользователей на основе содержимого URL, убедитесь, что такие перенаправления выполняются только локально в вашем приложении (или перенаправляются на известные URL, а не на какие-либо URL, которые могут быть указаны в строке запроса).
LocalRedirect
Использование метода помощника контроллера в базовом классе LocalRedirect:
Если указан нелокальный URL, LocalRedirect выдает исключение. В остальном он ведёт себя так же, как метод перенаправления. Информация об исключениях следующая:
InvalidOperationException: The supplied URL is not local. A URL with an absolute path is considered local if it does not have a host/authority part. URLs using virtual paths ('~/') are also local. Исходный код следующий:
Процесс выполнения: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl, и в итоге будет вызван IsLocalUrl для оценки (UrlHelperFactory по умолчанию реализует интерфейс IUrlHelperFactory). )。
Адрес исходного кода:Вход по гиперссылке виден.
IsLocalUrl
Перед перенаправлением IsLocalUrl проверьте URL следующим методом:
Код таков:
Тестовый код следующий:
Если вам разрешено переходить на другие доменные сайты, вы можете реализовать интерфейс IUrlHelperFactory и изменить IServiceCollection, чтобы заменить стандартный класс реализации при запуске программы.
Ссылка:Вход по гиперссылке виден.
(Конец)
|