|
|
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
|