ASP.Net projelerinizi
yayınlarken özellikle IIS sizin kontrolünüzde değilse bazı önlemleri
web.config tarafında veya gerekli yerlerde kod dosyalarında almanız
önemlidir. Bu aşamada kodunuza müdahale etmeden web.config’de hızlıca ne
gibi önlemler alabilirsiniz onu inceleyeceğiz.
1- Debug’ı kapatın.
Development halinde default olarak açık bulunan
debug opsiyonu publish ayarları yapılmadan yayınlandığında açık kalır.
Bunu kapatın.
<system.web>
<compilation debug=”false” targetFramework=”4.0”>
</system.web>
2- Trace’i kapatın.
Web sitesini,n hata ve işlemlerini uzaktan takip
etmeye yarayan trace komutu sistemle ilgili ciddi bilgileri açığa
vurabilmektedir. Zorunlu hallerde kısa süreliğine açık tutmanın yanı
sıra bu özellik kapalı olmalıdır.
<system.web>
<trace enabled=”false” localOnly=”true” />
</system.web>
3- http Runtime Değerleri
Uygulamanın çalışmasıyla ilgili bir çok farklı ayarı barındıran <httpRuntime/> elementinde aşağıdaki ayarları uuygulayın.
<system.web>
<httpRuntime enableVersionHeader=”false” /> //Asp.Net versiyon bilgisini gizler.
</system.web>
Diğer attiribute’ler:
enableHeaderChecking=”true” // ASP.Net Request Header’larını kontrol ederek zararlı requestlerde hata döndürür.
executionTimeout=”110” // 110
varsayılan değeri ile çalışan bu attiribute debug’ın false olduğu
durumlarda ASP.Net’in bir request’te hataya düşmeden önce kaç saniye
beklemes gerektiğini ayarlar.
maxRequestLength=”4096” //4096
varsayılan değeri ile çalışan bu attiribute Dos ataklarına bir önlem
olarak da kullanılabilir. Kullanıcıların post ettikleri veriyi KB
cinsinden sınırlar. FileUpload kontrolü de buradaki değere göre upload
yapar.
maxUrlLength=”260” //260 varsayılan
değeri olan attiribute adres satırındaki karakterlerin uzunluğunu
belirler. Gereksiz ise sayı düşürülmelidir.
4- Hata Sayfaları
Mutlaka uygulama bilgisi içermeyen özel hata
sayfaları üretin ve hata durumlarına göre bunlara yönlendirin. En
azından tek bir hata sayfanız olsun.
<system.web>
<customErrors defaultRedirect=”hata.aspx” mode=”RemoteOnly”></customErrors>
</system.web>
5- Gereksiz Http Header’ları Engelleyin.
Uygulamanız ve sunucunuz hakkında bilgi
gönderen http headerlarını engelleyin. Bu ayarlar <configuration>
taglerinin arasında aşağıdaki gibi yer alır.
<system.webServer>
<httpProtocol>
<customHeaders>
<remove name=”X-Powered-By” /> // Teknoloji bilgisinin döndürülmesini engeller Örn: ASP.Net
<remove name=”Server” /> // Sunucu bilgisinin döndürülmesini engeller. Örn IIS 7.5
<remove name=”X-AspNet-Version” /> //ASP.Net versiyon bilgisinin döndürülmesini engeller.
<add name=”X-FRAME-OPTIONS” value=”DENY” /> // Clickjack’den kaçınmak için iframe’leri reddeder. *
</customHeaders>
</httpProtocol>
</system.webServer>
6- Gereksiz http Verb’leri Engelleyin.
ASP.Net uygulamalrı genellikle POST ve GET
komutlarını kullanmaktadır. Bunların dışında kalanlar uygulama
gerektirmedikçe kullanılmaz. MOVE ve DELETE gibi seçeneklerin açık
olması sayfa değişimi gibi açıklara neden olabilir. Bu sebeplerden
sadece kullandığınız metodları açın.
<system.webServer>
<security>
<requestFiltering>
<verbs allowUnlisted=”false”>
<add verb=”GET” allowed=”true” />
<add verb=”POST” allowed=”true” />
</verbs>
</requestFiltering>
</security>
</system.webServer>
7- Mümkünse Kullanılmayan MIME-Type’ları Engelleyin.
IIS tarafından güvenli kabul edilen bir çok
uzantıya varsayılan olarak izin verilir. Eğer uygulamanızda çok fazla
dosya çeşitliliği yok ise bunları kısıtlayabilirsiniz.
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted=”false”>
<add fileExtension=”.cfm” allowed=”true” />
<add fileExtension=”.js” allowed=”true” />
<add fileExtension=”.css” allowed=”true” />
<add fileExtension=”.html” allowed=”true” />
<add fileExtension=”.aspx” allowed=”true” />
<add fileExtension=”.jpg” allowed=”true” />
<add fileExtension=”.png” allowed=”true” />
<add fileExtension=”.gif” allowed=”true” />
<add fileExtension=”.axd” allowed=”true” />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
8- Kritik İçeriği Filtreleyin
IIS varsayılan olarak web.config, bin,
App_Data gibi önemli bilgileri içeren klasör ve dosyaları gizler bunlara
ek klasör veya dosyalarınız var ise gizleyin.
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment=”configuration_folder” />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
9- URL’leri Kontrol Edin. Zararlı Dizileri Engelleyin.
“\”, “..” gibi dizinler arası geçişi
tanımlayan karakterler kullanılarak URL’ler üzerinden yetkisiz
klasörlere erişim denenbilir. Bu durumdan korunmak için:
<system.webServer>
<security>
<requestFiltering>
<denyUrlSequences>
<add sequence=”..” />
<add sequence=”:” /> //varsayılanlar dışında port kullanılan siteler için bu ayar sorun yaratabilir
<add sequence=”" />
</denyUrlSequences>
</requestFiltering>
</security>
</system.webServer>
10- ConnectionString’leri Şifreleyin
Web.config’de yer alan ConnectionString’ler
veritabanı bilgilerini düz text formatında sakladığından sunucuya
fiziksel erişim sağlanması durumunda veritabanı güvenliği açısından
büyük sıkıntı yaratacaktır.
Bu bilgileri şifreli olarak saklayın. Şifreleme işlemi için
Öncelikle uygulamanızın kullanıcısnı tespit edin. Bu Default Application Pool için
IIS APPOOL\DefaultAppPool şeklindedir. “\” işaretinin sağ tarafı application pool identity’e tekabül eder.
Veya küçük bir web uygulaması yaparak merak ettiğiniz sitenin altında çalıştırmak kaydıyla
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
Komutunu kullanabilirsiniz.
2. adımda Sunucuda Commad Promt açarak,
Cd komutu ile Framework versiyonunuzun klasörüne geçin. Örn: C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Burada aspnet_regiis -pe “connectionStrings” -app “/UygulamaAdi” komutunu çalıştırın
Son adımda ise aynı komut satırında
aspnet_regiis -pa "NetFrameworkConfigurationKey" " IIS APPOOL\DefaultAppPool "
komutunu çalıştırarak 1. Adımda
belirlediğiniz uygulamayı çalıştıran kullanıcının şifrelenmiş bilgiye
erişimini sağlayın. Bu işlem varsayılan olarak RSA Encryption kullanır.
ConnectionString’i decrypt etmek için 2. Adımdaki komutu –pe parametresi yerine –pd parametresi ile kullanmanız yeterlidir.
* Bu işlemi Global.asax dosyasında yaparsanız daha verimli sonuç elde edebilirsiniz.
void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("x-frame-options", "DENY");
}
Hiç yorum yok :
Yorum Gönder