Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 5685|Отговор: 2

[Източник] ASP.NET Ядро (20) Предотвратяване на открити пренасочващи атаки

[Копирай линк]
Публикувано в 6.06.2023 г. 21:55:38 ч. | | | |
Изисквания: Наскоро прочетох документа на Microsoft за ASP.NET Core "Предотвратяване на отворени пренасочващи атаки в ASP.NET Core", което приблизително означаваРазработчиците трябва да обръщат внимание на пътя на местния сайт, когато преминават към адреса за обратно повикване, за да предотвратят някои хора злонамерено да фалшифицират този адрес за фишинг атаки。 Изучи кода и се подготви да го пренесеш към проекта ASP.NET MVC.

Спомням си, че един голям производител е имал тази уязвимост преди, и някои хора са я използвали, за да източват трафика от QQ и WeChat, както следва:



Използвайки уязвимостта, някои чат инструменти не успяха да попречат на потребителите да кликват върху линкове за достъп до злонамерено съдържание на уебсайтове поради доверието си в домейните на големите компании.

Какво е открита пренасочваща атака?

Уеб приложенията често пренасочват потребителите към страници за вход, когато имат достъп до ресурси, които изискват автентикация. Пренасочванията обикновено включват параметър returnUrl querystring, така че потребителите да могат да се върнат към първоначално поискания URL след успешно влизане. След като потребителят се удостовери, той се пренасочва към URL адреса, който първоначално е поискал.

Пример за атака

Злонамерен потребител може да разработи атака, предназначена да даде на злонамерен потребител достъп до идентификационните данни или чувствителната информация на потребителя. За да започне атака, злонамерен потребител би заблудил потребителя да кликне върху линк към целевата страница на сайта ви и да добави стойността на returnUrl querystring към този 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 адреси, които може да са предоставени в заявката).

Локално пренасочване

Използвайки метода Controller helper в базовия клас 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 за сравнение на първични ключове
 Хазяин| Публикувано в 6.06.2023 г. 21:57:12 ч. |
ASP.NET Core (деветнадесет) използва 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 UI в Core(8).
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Ядро (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 Ядро (2) Рестартиране на приложението чрез код
https://www.itsvse.com/thread-9480-1-1.html

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

Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com