FileUpload Kontrolünü Etkili Kullanmak ve Güvenlik Konuları
File Upload Kontrolü ASP.net 2.0 ile gelince çoğu problemimiz çözüldü fakat server ile ilgili ve HTTP altyapısında bulunan bazı kısıtlardan dolayı File Upload kullanımında sürükle bıraktan daha fazlasını bilmek gerekiyor. Öncelikli olarak server için yapılması gereken ayarlama FileUpload sonucu gönderilen dosyaların saklanacağı klasörün Network Service kullanıcı için read-write izinlerini sağlıyor olması gerekli. Bunun için ISS ile ya da Klasör için Advance Configurations ayarlarını yapmamız gerekiyor.(ISS 6-7 için Network Service,ISS 5 için ASP.net kullanıcısıdır.)
Bir diğer sorun da web.config içerinden ayarlanabilecek bir ayarlamayla
ile kb cinsinden dosya boyutları ve sn cinsinden time out süreleri ayarlanmalıdır. Bu iki konu aşıldığında ise FileUpload kontrolünü kullanmak kolay olacaktır. Server da gerçekleştireceğiniz diğer işlemler(XML okuma yazma ya da basit file Stream dahi) için ISS için söylediğim ayarlamalar yapılmalıdır. File upload kontrolünün bulunduğu sayfa için role tabanlı ya da windows tabanlı bir güvenlik sistemi oluşturulması izinsiz kişilerin sizin dosyalarınız arasına dosya göndermesini engeller fakat izinsiz kod çalıştırılmasını engellemek için sadece ihtiyaca göre dosya uzantılarını kısıtlarsak bunun önüne kolayca geçebiliriz.Bu kodlarla ben sadece resim dosyaları için açtığım bir klasöre istediğim resim formatlarında olan dosyaları kabul ettim.Eğer böyle bir kontrol yapmamış olursam kötü niyetli bir kişi benim yapmış olduğum fileupload kontrolü ile kendi yazdığı asd.aspx ve asd.aspx.vb (kötü niyetli kişimiz vb ile yazıyor olsun
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile) // Dosya yolu girilmişse
{
string extension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
if (extension == ".jpg" extension == ".gif")
{
try
{
string path = Request.PhysicalApplicationPath + @"data\";
string dosyaAdi = Path.GetFileName(FileUpload1.PostedFile.FileName);
string uploadYolu = Path.Combine(path, dosyaAdi);
FileUpload1.PostedFile.SaveAs(uploadYolu);
Label1.Text = string.Format("Dosya yüklendi..
Dosya adı: {0}
Dosya boyutu: {1} byte
Dosya adresi: {2}", FileUpload1.PostedFile.FileName, FileUpload1.PostedFile.ContentLength, Server.MapPath("data") + FileUpload1.PostedFile.FileName);
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
}
}
) ) dosyalarını atarak ilk olarak düşünebildiğim benim klasörümdeki tüm resimlerimi silebilir. Bunu önlemenin diğer bir yolu da klasörümüzde bir kod sayfası bulundurmayacaksak ISS altındaki bu klasör için Network Service kullanıcısının executable yeteneğini kaldırabiliriz.
web.config-I Programlama Dilleri ve Yapısal Özellikleri