September 2, 2007
@ 09:38 PM

ASP.NET uygulamarınızda kullanıcılardan dosya transferi yapmak istediğimizde FileUpload Asp.net sunucu kontrolü ile basit bir şekilde bu işlemi hallederiz.Basit bir örnek ile

if (FileUpload1.HasFile)
{
   try
   {
      FileUpload1.SaveAs(Server.MapPath(".") + "/uploads/" + FileUpload1.FileName);
   }
   catch (Exception exp)
   {
      //hede höde
   }
}

Tabi dosyaları saklayacağınız dizine yazma hakkı (ASP.NET kullanıcısına) vermeliyiz. Buraya kadar herşey doğal gibi görünse de unuttuğumuz küçük! bir ayrıntı var ki o da dosya boyutu ve dosya tipi. Öncelikle istemediğimiz dosya tiplerinin sunucumuza upload edilmesini önlemeliyiz. Kullanıcıdan sunucuya gönderilen dosya tipini

Response.Write(FileUpload1.PostedFile.ContentType);
//bir txt dosyasını gönderdiğinizde tarayıcımızda "text/plain",bir mp3 dosyası göndediğimizde ise "audio/mpeg" yazdıgını göreceğiz.

kod satırı ile öğrenebilir ve istemediğimiz tipdeki dosyaların sunucuya gönderilmesini engelleyebiriz.Peki gelelim dosya büyüklüğüne. Bu basit hali ile uygulamamızı kullanıcılara açtığımızda beklenmedik bir durum ile karşılaşma ihtimalimiz çok yüksek. Örneğin iş başvurusu yapılacak ve kullanıcılardan CV lerini word dökümanı olarak istemekteyiz. ContentType ile dosya tipini belirleyerek başka formatlardaki dosyaları sunucumuza gönderilmesini engelledik. E güzel!. Dosya boyu 5 mb olan bir kullanıcı CV sini göndermeye çalıştığında ne olur ? Görünürde "ne olabilir ki?" dediğimizde aslında sunucumuz - iis - bu işlemi iptal edecek ve hatta yukardaki kod örneğinde catch bloğumuz işe yaramayacaktır. Olan olmuştur. Sunucu bir request'deki varsayılan büyüklük olan 4MB  sınırının aşıldığını tespit edecek ve bir hata oluşturacaktır (HttpUnhandledException). Peki Global.asax da biz bu hatayı yaklayıp inceleyelim.

Görüldüğü gibi yakalanan hatamızın InnerException nesnesine baktığımızda oluşturulan isteğin sınırı aştığını görebiliriz. Bu bizim için aslında dezavantajdan ziyada avantajdır.Çok büyük dosyalar yükleyerek sistemimizin yavaş çalışmasına neden olacak kötü niyetli arkaşlarımızı! birazcık üzecektir.  Çözüm ise sunucumuzun gelen isteklerin boyutunun 4MB den büyük olmasına izin vermesi. Bunu da web.config doyasını aşağıdaki gibi düzenleyerek sağlayabiliriz.

<httpRuntime maxRequestLength="16384"/>

Artık sunucumuz bu ayar ile maksimum istek boyutunu yaklaşık 16MB olarak kabul edecektir. Tabi burda dikkat etmemiz gereken en önemli nokta ise sunucumuzun bu uzun işlemler sırasında -16MB lik bir dosya kullanıcının bağlantısı yavaş olduğunu göz önüne alındığında yüklenmesi uzun bir işlem olacaktır - Normalde 90 sn boyunca gelen isteğe cevap veremezse IIS, isteği sonlandıracak ve timeout hatası gönderecektir. Bunu da engellemek için web.config dosyamızda aşağıdaki düzenlemeyi yaparız.

<httpRuntime maxRequestLength="20000" executionTimeout="360"/>

artık sunucumuz 90 sn değil 360 sn boyunca gelen isteği cevaplamak için "var gücü ile :) " çaba sarfedecektir ;) Tabi bu süreyi iyi analiz etmeli performans sorunları yaşamamak için bu sürenin uygulamanız çerçevesinde ne kadar süre olarak belirlenmesini iyi analiz etmek gerekir.


 
Sunday, September 02, 2007 10:58:29 PM (GTB Daylight Time, UTC+03:00)
burada belirtilmesi gereken bir husus daha var oda şu ki; eğer bir resim upload uygulaması yapılıyorsa yüklenen resim, herhangi bir resim kütüphanesi ( gd, imagemagic..v.b ) yardımıyla aynı boyutlarda yeniden resize edilmeli ve eğer işlem başarılı ise upload işlemi yapılmalıdır zira notepad ile oluşturmuş olan bir döküman.jpg, .png gibi kaydedilebilir ve içine yazılabilcek javascript kodları ciddi xss açıklarına sebep olabilir.
Sunday, September 02, 2007 11:19:18 PM (GTB Daylight Time, UTC+03:00)
Eklediğiniz bilgi - ve akılcı çözüm önerisi içeriyor - için teşekkür ederim. Cidden dikkat edilmesi gereken bir o kadar da gözden kaçan bir konu xss açıkları. Yalnız anlamadığım şu. Mesela ben simdi gidip bir x.txt dosyasının içine js kodları yazacağım ve uzantısını jpg olarak değiştireceğim ya da file-> save as.. den x.jpg olarak kaydedeceğim. Bunu da sunucuya upload edeceğim.Doğru anladımsa bu durumda her durumda ContentType bana image/jpg değerini vermeyecek text/plain değerini verecektir. Ama bahsettiğiniz durumu anlamadıysam tüm söylediklerim gecersiz tabi ki :)
Thursday, January 10, 2008 3:31:04 PM (GTB Standard Time, UTC+02:00)
malesef ContentType bu "numarayı" yiyor ve farklı kaydet deyip jpg uzantı ile kaydedebiliyoruz. fakat resmi direkt çağırdığımızda dahi js kodları çalışmıyor.
Friday, May 30, 2008 10:39:02 PM (GTB Daylight Time, UTC+03:00)
Bilgilendirmeniz için çok teşekkür ederim Oğuz bey.Bir sorum olacaktı:
4MB dan büyük bir dosya upload edildiğinde browser da "sayfa görüntülenemiyor" sonucuna ulaşıyorum.Ama bunun yerine sayfamda "yüklemeye çalıştığınız dosya 4MB dan büyük" şeklinde bir uyarı vermek istiyorum.bunu CodeBehind da yapamıyorum.
bu hatayı ziyaretçiye nasıl iletirim.
teşekkür ederim iyi çalışmalar.
Friday, November 06, 2009 3:19:37 AM (GTB Standard Time, UTC+02:00)
Do you want to buy some sheepskin boots, please come to www.findugg.com.Full range of UGG boots for Men and Women to buy online. Fast and free shipping to worldwide, competitive price, high quality, and efficient service.

Read more:http://www.findugg.com
Monday, November 09, 2009 2:36:12 AM (GTB Standard Time, UTC+02:00)
Ugg boots are a style of <a href="http://www.gouggs.com/products_all.html">sheepskin boot</a>,with wool as the inner lining and a tanned outer surface worn by both men and women. <a href="http://www.gouggs.com/ugg-cardy-boots-c-2.html">UGG shoes boots</a> often have a synthetic sole, although this is not universal. Uggs have been identified as a fashion trend for <a href="http://www.gouggs.com/ugg-short-boots-c-1.html">men UGG Short Boots</a> and <a href="http://www.gouggs.com/womens-c-17.html">Womens UGG Boots</a> since the early 2000s. In late 2008, <a href="http://www.gouggs.com/ugg-bailey-button-c-10.html">UGG Bailey Button</a>grew again in popularity with men as male celebrities were seen in them.
Saturday, November 21, 2009 2:44:05 PM (GTB Standard Time, UTC+02:00)
Do you want to buy some <a href="http://www.findugg.com/products_all.html">sheepskin boot</a>,come to <a href="http://www.findugg.com/">www.findugg.com</a>.Full range of UGG boots for Men&<a href="http://www.findugg.com/ugg-womens-c-17.html">women</a>to buy online. Fast and free shipping to worldwide, competitive price, high quality, and efficient service.

Read more:http://www.findugg.com or http://www.bootshotsale.com
Sunday, November 29, 2009 6:01:09 PM (GTB Standard Time, UTC+02:00)
I'm a diabetic with poor circulation and so my toes almost never

warm up.. I ordered these <a href="http://www.mytobling.com/ugg-

ultra-short-boots-c-42.html"><strong>ugg ultra short</strong></a>

hoping they would help and they did the job pretty well. The inside

is very plush, my feet even feel close to sweating when the air con

is up and the house is warm. The upper is a little tight, I wouldn't

recommend these for larger people.
<a href="http://www.mytobling.com/ugg-ultra-tall-boots-c-

43.html"><strong>ugg ultra tall</strong></a> provided prompt

delivery and showed sincere concern for my satisfaction
Tuesday, December 01, 2009 11:10:26 AM (GTB Standard Time, UTC+02:00)
Remember the scene from the film BUTCH CASSIDY AND THE SUNDANCE KID with lovely actress Katharine Ross <a href="http://www.prettyboots.com">uggs on sale</a> on the handle bars of Paul Newman's bicycle while "Raindrops Keep Falling On My Head" plays in the background? Most people familiar with that movie know that Newman was playing real life legendary robber Butch Cassidy and that Robert Redford (who does not appear in that scene) plays his equally real partner in crime 。
Sunday, December 20, 2009 6:06:32 AM (GTB Standard Time, UTC+02:00)
Thank you for sharing, and look forward to read more of your nice article
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview