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

Вид: 5685|Ответ: 2

[Источник] ASP.NET Core (20) Предотвращение открытых перенаправленных атак

[Скопировать ссылку]
Опубликовано 06.06.2023 21:55:38 | | | |
Требования: Недавно я прочитал документ 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, чтобы заменить стандартный класс реализации при запуске программы.

Ссылка:Вход по гиперссылке виден.

(Конец)





Предыдущий:Docker строит образы на основе Windows
Следующий:[Turn] (MSSQL) SQL Server база данных int и guid для сравнения первичных ключей
 Хозяин| Опубликовано 06.06.2023 21:57:12 |
ASP.NET Core (nineteen) использует BackgroundService для выполнения фоновых задач
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Настройка простого кэша выхода OutputCache
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) интегрирует анализ производительности приложений MiniProfile
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Ядро (16) Зависит от инъекции динамических регистрационных сервисов
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV) использует HttpClient для отправки HTTP-запросов
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (четырнадцать) основана на капче изображения SkiaSharp
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII), чтобы определить, является ли это запросом Ajax
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (двенадцать) фронтенд JS, объединение CSS и компрессия
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Маршрут конечной точки Core (XI) добавляет промежуточное ПО для отображения всех сервисов DI
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Подробное объяснение приоритетов конфигурации в Core(10).
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Подробное объяснение промежуточного программного обеспечения Core (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET яма стандартных параметров интерфейса Swagger в Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Глубокий анализ исходного кода фреймворка
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI вручную получает метод введения объектов
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (пять) основана на распределённых транзакциях с CAP
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Фильтр Core(4) унифицированная валидация модели ModelState
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Ядро (iii) Динамическое создание экземпляров с помощью ActivatorUtilities
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Core (2) Перезапустить приложение по коду
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) использует кэширование Redis
https://www.itsvse.com/thread-9393-1-1.html
 Хозяин| Опубликовано 06.06.2023 22:01:21 |
Метод IsLocalUrl портируется на фреймворк .NET следующим образом:

Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com