Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 5685|Yanıt: 2

[Kaynak] ASP.NET Core (20) Açık yönlendirme saldırılarını önle

[Bağlantıyı kopyala]
Yayınlandı 6.06.2023 21:55:38 | | | |
Gereksinimler: Yakın zamanda Microsoft'un ASP.NET Core belgesi "ASP.NET Core'da Açık Yönlendirme Saldırılarını Önlemek" adlı belgesini okudum, bu kabaca şu anlamdaGeliştiriciler, geri çağrı adresine atlarken yerel sitenin yoluna dikkat etmelidir; böylece bazı kişiler oltalama saldırıları için geri çağrı adresini kötü niyetli olarak sahte yapmasını önlemelidir。 Kodu inceleyin ve ASP.NET MVC projesine taşımaya hazırlanın.

Daha önce büyük bir üreticinin bu güvenlik açığını yaşadığını hatırlıyorum ve bazı kişiler bunu QQ ve WeChat'ten trafik çekmek için kullanmıştı, aşağıdaki gibi:



Bu zafiyetten yararlanan bazı sohbet araçları, büyük şirketlerin alan adlarına olan güvenleri nedeniyle kullanıcıların kötü amaçlı web sitesi içeriğine erişmek için bağlantılara tıklamalarını engelleyemedi.

Açık yönlendirme saldırısı nedir?

Web uygulamaları, kullanıcıları kimlik doğrulaması gerektiren kaynaklara eriştiklerinde sık sık giriş sayfalarına yönlendirir. Yönlendirmeler genellikle kullanıcıların başarılı bir giriş sonrası orijinal istenen URL'ye geri dönebilmeleri için returnUrl sorgu dizisi parametresi içerir. Kullanıcı kimlik doğrulaması yaptıktan sonra, orijinal istediği URL'ye yönlendirilir.

Saldırı örneği

Kötü niyetli bir kullanıcı, kötü niyetli kullanıcıya kullanıcının kimlik bilgilerine veya hassas bilgilerine erişim sağlamak için tasarlanmış bir saldırı geliştirebilir. Bir saldırı başlatmak için, kötü niyetli bir kullanıcı kullanıcıyı sitenizin açılış sayfasına bir bağlantıya tıklamaya kandırır ve o URL'ye returnUrl sorgu dizisi değerini ekler. Böylececontoso.comÖrneğin, uygulamahttp://contoso.com/Account/LogOn?returnUrl=/Home/AboutBir açılış sayfası içerir. Saldırı şu adımları takip eder:

  • Kullanıcı, kötü amaçlı bir bağlantıya tıklar.http://contoso.com/Account/LogOn?returnUrl=http://contoso1.com/Account/LogOn(İkinci URL "contoso1.com", yerine "contoso.com”) 。
  • Kullanıcı başarıyla giriş yapar.
  • Kullanıcı siteye yönlendirilirhttp://contoso1.com/Account/LogOn(Gerçek olana tam benzeyen kötü niyetli bir site).
  • Kullanıcı tekrar giriş yapar (kötü amaçlı siteye kimlik bilgileri sağlar) ve gerçek siteye yönlendirilir.
  • Kullanıcılar, ilk giriş girişimlerinin başarısız olduğunu ve ikinci denemenin başarılı olduğunu düşünebilirler.Kullanıcıların kimlik bilgilerinin ele geçirildiğini hâlâ bilmiyor olması muhtemeldir




Açılış sayfalarının yanı sıra, bazı siteler yönlendirme sayfaları veya uç noktaları da sunar. Diyelim ki uygulamanızda açık yönlendirme içeren bir sayfa var, /Home/Redirect. Örneğin, bir saldırgan bir e-postada bir puan oluşturabilir[yoursite]/Home/Redirect?url=http://phishingsite.com/Home/Loginbağlantı. Düzenli kullanıcılar URL'nin site adınızla başladığını görecektir. Güven nedeniyle bağlantıya tıklıyorlar. Açık yönlendirmeler ardından kullanıcıları sizinkilerle aynı görünen oltalama sitelerine yönlendirir ve kullanıcılar sizin olduğunu düşündükleri sitelere giriş yapabilir.

Açık yönlendirme saldırılarını önleyin

Web uygulamaları geliştirilirken, kullanıcı tarafından sağlanan tüm veriler güvenilmez olarak kabul edilir. Uygulamanız kullanıcıları URL içeriğine göre yönlendirme yeteneğine sahipse, bu yönlendirmelerin yalnızca uygulamanızda yerel olarak yapıldığından emin olun (veya bilinen URL'lere yönlendirildiğinden, sorgu dizisinde sağlanabilecek URL'lerden değil).

LocalRedirect

LocalRedirect temel sınıfında Controller yardımcı yöntemi kullanılarak:

Yerel olmayan bir URL belirtilmişse, LocalRedirect bir istisna oluşturur. Aksi takdirde, Redirect yöntemiyle aynı şekilde davranır. İstisna bilgileri aşağıdaki gibidir:

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.
Kaynak kodu şöyledir:



Yürütme süreci: LocalRedirect -> LocalRedirectResult -> IActionResultExecutor<LocalRedirectResult> -> LocalRedirectResultExecutor -> UrlHelper -> IsLocalUrl -> CheckIsLocalUrl ve sonunda IsLocalUrl çağrılacak (UrlHelperFactory varsayılan olarak IUrlHelperFactory arayüzünü uygular). )。

Kaynak kodu adresi:Bağlantı girişi görünür.

IsLocalUrl

IsLocalUrl'de yönlendirmeden önce URL'yi bu yöntemle test edin:

Kod şöyledir:

Test kodu şu şekildedir:



Diğer alan adı sitelerine geçiş izniniz varsa, IUrlHelperFactory arayüzünü uygulayabilir ve program başladığında varsayılan uygulama sınıfını değiştirecek şekilde IServiceCollection'ı değiştirebilirsiniz.

Referans:Bağlantı girişi görünür.

(Son)





Önceki:Docker, Windows sistemlerinin üzerinde görüntüler oluşturur
Önümüzdeki:[Dönüş] (MSSQL) SQL Server veritabanı int ve birincil anahtar karşılaştırması için yönlendirme
 Ev sahibi| Yayınlandı 6.06.2023 21:57:12 |
ASP.NET Core (on dokuz) arka plan görevlerini çalıştırmak için BackgroundService kullanır
https://www.itsvse.com/thread-10591-1-1.html

ASP.NET Core (18) Basit bir OutputCache çıkış önbelleğini özelleştirin
https://www.itsvse.com/thread-10583-1-1.html

ASP.NET Core (17) MiniProfile uygulama performans analizini entegre ediyor
https://www.itsvse.com/thread-10571-1-1.html

ASP.NET Core (16) Dinamik kayıt hizmetlerinin enjeksiyonuna bağlı
https://www.itsvse.com/thread-10560-1-1.html

ASP.NET Core (XV), HTTP istekleri göndermek için HttpClient kullanır
https://www.itsvse.com/thread-10311-1-1.html

ASP.NET Core (on dört) SkiaSharp image captcha'sına dayanmaktadır
https://www.itsvse.com/thread-10287-1-1.html

ASP.NET Core (XIII) ile Ajax talebi olup olmadığını belirlemek için
https://www.itsvse.com/thread-10284-1-1.html

ASP.NET Core (on iki) ön uç JS, CSS paketleme ve sıkıştırma
https://www.itsvse.com/thread-10282-1-1.html

ASP.NET Core (XI) uç nokta rotası, tüm DI servislerini görüntülemek için middleware ekler
https://www.itsvse.com/thread-10269-1-1.html

ASP.NET Core(10)'daki Konfigürasyon önceliklerinin ayrıntılı açıklaması.
https://www.itsvse.com/thread-10265-1-1.html

ASP.NET Core'un Middleware ara yazılımının ayrıntılı açıklaması (9).
https://www.itsvse.com/thread-9647-1-1.html

ASP.NET Core(8)'deki Swagger arayüzünün varsayılan parametrelerinin bir yuvası.
https://www.itsvse.com/thread-9640-1-1.html

ASP.NET Core (7) Framework kaynak kodunun derinlemesine analizi
https://www.itsvse.com/thread-9601-1-1.html

ASP.NET Core (VI) DI, nesneleri enjekte etme yöntemini manuel olarak elde eder
https://www.itsvse.com/thread-9595-1-1.html

ASP.NET Core (beş) CAP dağıtık işlemlere dayanmaktadır
https://www.itsvse.com/thread-9593-1-1.html

ASP.NET Core(4) filtresi birleşik ModelState model validasyonu
https://www.itsvse.com/thread-9589-1-1.html

ASP.NET Core (iii) ActivatorUtilities kullanarak dinamik örnekler oluşturun
https://www.itsvse.com/thread-9488-1-1.html

ASP.NET Çekirdek (2) Uygulamayı kodla yeniden başlat
https://www.itsvse.com/thread-9480-1-1.html

ASP.NET Core (1) Redis önbellekleme kullanır
https://www.itsvse.com/thread-9393-1-1.html
 Ev sahibi| Yayınlandı 6.06.2023 22:01:21 |
IsLocalUrl yöntemi .NET framework'e aşağıdaki şekilde taşınır:

Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com