M.Onur ATÇI

Kişisel Web Günlüğü

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.

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;
}
}
}
}
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 :) ) ) 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.

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>