Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, uygulamanın varsayılan olarak sunucuya gönderilen kodlanmamış HTML içeriğini işlemesinin engellendiği ASP.NET istek doğrulama özelliği açıklanır. Uygulama, HTML verilerini güvenli bir şekilde işlemek üzere tasarlandığında bu istek doğrulama özelliği devre dışı bırakılabilir.
ASP.NET 1.1 ve ASP.NET 2.0 için geçerlidir.
1.1 sürümünden bu yana ASP.NET özelliği olan istek doğrulama, sunucunun kodlanmamış HTML içeren içeriği kabul etmesini engeller. Bu özellik, istemci betik kodunun veya HTML'nin istemeden bir sunucuya gönderilebildiği, depolanabildiği ve ardından diğer kullanıcılara sunulabildiği bazı betik ekleme saldırılarını önlemeye yardımcı olmak için tasarlanmıştır. Yine de uygun olduğunda tüm giriş verilerini ve HTML kodlamasını doğrulamanızı kesinlikle öneririz.
Örneğin, kullanıcının e-posta adresini isteyen ve ardından bu e-posta adresini bir veritabanında depolayan bir Web sayfası oluşturursunuz. Kullanıcı geçerli bir e-posta adresi yerine <SCRIPT>alert("welcome from script")</SCRIPT> girerse, bu veriler sunulduğunda, içerik düzgün ifade edilmediyse bu betik çalıştırılabilir. ASP.NET istek doğrulama özelliği bunun olmasını engeller.
Bu özellik neden yararlıdır?
Birçok site, basit betik ekleme saldırılarına açık olduklarının farkında değildir. Bu saldırıların amacının HTML görüntüleyerek siteyi yok etmek veya kullanıcıyı bir korsanın sitesine yönlendirmek için potansiyel olarak istemci betiği yürütmek olup olmadığı, betik ekleme saldırıları Web geliştiricilerinin ilgilenmesi gereken bir sorundur.
Betik ekleme saldırıları, ASP.NET, ASP veya diğer web geliştirme teknolojilerini kullanıp kullanmadıklarına bakılmaksızın tüm web geliştiricileri için önemlidir.
ASP.NET isteği doğrulama özelliği, geliştirici bu içeriğe izin vermediği sürece kodlanmamış HTML içeriğinin sunucu tarafından işlenmesine izin vermeyerek bu saldırıları proaktif olarak önler.
Neler bekleyebileceğiniz: Hata Sayfası
Aşağıdaki ekran görüntüsünde bazı örnek ASP.NET kodu gösterilmektedir:
Bu kodun çalıştırılması, metin kutusuna metin girmenize, düğmeye tıklamanıza ve metni etiket denetiminde görüntülemenize olanak tanıyan basit bir sayfaya neden olur:
Ancak, <script>alert("hello!")</script> gibi JavaScript kodu girilip çalıştırıldığında bir istisna ile karşılaşırız:
Hata iletisi , 'potansiyel olarak tehlikeli bir Request.Form değeri algılandığını' belirtir ve tam olarak ne olduğu ve davranışın nasıl değiştirildiği hakkında açıklamaya daha fazla ayrıntı sağlar. Örneğin:
İstek doğrulaması tehlikeli olabilecek bir istemci giriş değeri algıladı ve isteğin işlenmesi durduruldu. Bu değer, siteler arası betik saldırısı gibi uygulamanızın güvenliğini tehlikeye atma girişimini gösterebilir. Sayfa yönergesinde veya yapılandırma bölümünde ayarlayarak validateRequest=false istek doğrulamasını devre dışı bırakabilirsiniz. Ancak, uygulamanızın bu durumdaki tüm girişleri açıkça denetlemesi kesinlikle önerilir.
Sayfada istek doğrulamayı devre dışı bırakma
Sayfada istek doğrulamasını devre dışı bırakmak için Page yönergesinin validateRequest özniteliğini false olarak ayarlamanız gerekir.
<%@ Page validateRequest="false" %>
Dikkat
İstek doğrulaması devre dışı bırakıldığında, içerik bir sayfaya gönderilebilir; içeriğin düzgün bir şekilde kodlandığından veya işlendiğinden emin olmak sayfa geliştiricisinin sorumluluğundadır.
Uygulamanız için istek doğrulamayı devre dışı bırakma
Uygulamanızın istek doğrulamasını devre dışı bırakmak için, uygulamanız için bir Web.config dosyası değiştirmeniz veya oluşturmanız ve bölümünün validateRequest özniteliğini <pages /> olarak falseayarlamanız gerekir:
<configuration>
<system.web>
<pages validateRequest="false" />
</system.web>
</configuration>
Sunucunuzdaki tüm uygulamalar için istek doğrulamasını devre dışı bırakmak isterseniz, Machine.config dosyanızda bu değişikliği yapabilirsiniz.
Dikkat
İstek doğrulaması devre dışı bırakıldığında, uygulamanıza içerik gönderilebilir; içeriğin doğru şekilde kodlandığından veya işlendiğinden emin olmak uygulama geliştiricisinin sorumluluğundadır.
Aşağıdaki kod, istek doğrulamasını kapatmak için değiştirilir:
Şimdi metin kutusuna <script>alert("hello!")</script> aşağıdaki JavaScript girilmişse sonuç şöyle olacaktır:
Bunun olmasını önlemek için, istek doğrulaması kapalıyken içeriği HTML ile kodlamamız gerekir.
HTML kodlama içeriği
İstek doğrulamayı devre dışı bırakmışsanız, gelecekte kullanmak üzere depolanacak HTML kodlama içeriğini kullanmak iyi bir uygulamadır. HTML kodlaması, tüm '<' veya '>' simgelerini (diğer birkaç simgeyle birlikte) otomatik olarak ilgili HTML kodlanmış gösterimiyle değiştirir. Örneğin, '
İçerik, API kullanılarak Server.HtmlEncode(string) sunucuda kolayca HTML ile kodlanabilir. İçerik, Server.HtmlDecode(string) yöntemi kullanılarak kolayca HTML olarak çözülebilir, yani standart HTML'ye geri döndürülebilir.
Sonuç olarak: