Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 5685|Відповідь: 2

[Джерело] ASP.NET Ядро (20) Запобігання відкритим перенаправленням

[Копіювати посилання]
Опубліковано 06.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, які можуть бути вказані у рядку запиту).

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 (дев'ятнадцять) використовує Background Service для виконання фонових завдань
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 Ядро (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