En iyi yanıtlayıcılar
Dosya kontrolü mvc

Soru
-
Geçenlerde bir siteye üye olmuştum. Profil resmi yükleyecektim aklıma bişey geldi küçük bir exe dosyasının uzantısını .jpg olarak değiştirdim sonra bunu seçip kaydet dedim yükledi dosyayı. Bu gibi saçma durumlar yaşanmasın diye Mvc de bu upload edilen dosyaları en sağlıklı nasıl kontrol edebiliriz.
Yanıtlar
-
Uzantısı ne olursa olsun mime type asla değişmez. Bunu da upload nesnesinin contenttype değerinden öğrenebilirsin. Örneğin jpg için .ContentType == "Image/PJpeg" şeklinde kontrol etmen gerekir. Şu linkte https://www.sitepoint.com/web-foundations/mime-types-complete-list/ tüm mime type ve dosyalar ile eşleşmesi var oradaki listeden faydalanabilirsin.
Fullstack Developer
- Yanıt Olarak Öneren MuratAKSARAY 5 Eylül 2016 Pazartesi 14:50
- Yanıt Olarak İşaretleyen NScoder54 5 Eylül 2016 Pazartesi 15:58
-
Tüm Yanıtlar
-
-
-
Uzantısı ne olursa olsun mime type asla değişmez. Bunu da upload nesnesinin contenttype değerinden öğrenebilirsin. Örneğin jpg için .ContentType == "Image/PJpeg" şeklinde kontrol etmen gerekir. Şu linkte https://www.sitepoint.com/web-foundations/mime-types-complete-list/ tüm mime type ve dosyalar ile eşleşmesi var oradaki listeden faydalanabilirsin.
Fullstack Developer
- Yanıt Olarak Öneren MuratAKSARAY 5 Eylül 2016 Pazartesi 14:50
- Yanıt Olarak İşaretleyen NScoder54 5 Eylül 2016 Pazartesi 15:58
-
-
Uzantısı ne olursa olsun mime type asla değişmez. Bunu da upload nesnesinin contenttype değerinden öğrenebilirsin. Örneğin jpg için .ContentType == "Image/PJpeg" şeklinde kontrol etmen gerekir. Şu linkte https://www.sitepoint.com/web-foundations/mime-types-complete-list/ tüm mime type ve dosyalar ile eşleşmesi var oradaki listeden faydalanabilirsin.
Upload sırasında Content-Type headerı istemci tarafından belirlenir. Oraya istediğini yazabilir. Kısaca bu yöntem aslında çalışmaz.
Fullstack Developer
-
Yani bildiğim kadarıyla şöyle hatırlıyorum yanlışım olmasında. Sonuçta content-type ı plain/text yapıp dosya uzantısını da .txt yaparsa en alasından firewall den bile geçer. Yine de tedbir tedbirdir. İçeride flaglarla da uğraşılmaz bana göre, zaten IIS default executable işlemini bin klasöründe bir tek yapıyor. IIS üzerinden saldırsa da güvenliğe takılır, herhalde upload edilen dosyayı bin klasörüne de yazacak aptal yoktur. Ha IIS de de farklı bir oturuma geçerse o zaten başka kanal dan da içeri dosya çeker. Genel itibari tedbir tedbirdir derim.
Fullstack Developer
-
Bunun tebir ile ilgisi yok ki, bir miktar byte stream ile geliyor, header inde image/jpeg yazması onu jpeg yapmaz, byte ların bir bitmap a ait olması önemli.
Hatta byte lar gerçekten bir bitmap'a ait olup devamında bir exe ye ait entry point te olabilir, hatta eskiden bu jpg uzantılı dosyaya çift tıkladığında windows entry pointi görüp execute bile ediyordu. (Msn Messenger zamanındaki jpeg ile trojan gönderme olayını hatırlayın)
Cihan'ın anlatmak istediği bu exe bile olsa sunucuda execute edilmeyecek, edilse bile iis onu administrator yetkisi ile execute etmeyecek.
Basit çözüm, gelen byte lara bitmap muhamelesi yaparsın (resize vs.) hata alırsan resim değildir, bitti.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
-
-
Önay bey proje ciddi bir güvenliğe ihtiyaç duymuyorsa bence benim dediğimle yetinmek makul geliyor bana. Aksi halde projede ciddi bir güvenlik ihtiyacı varsa projede hata alarak kontrol etmek pek mantıklı gelmedi. Affınıza sığınarak düzeltmek istediğim nokta bu serverin konusu değil firewall in konusuna giriyor sanırım. Eğer böyle bir durum söz konusu ise firewall rulelerine mime flag eşleşmesi yaptırmak, dosyada bu dediğiniz injection kontrolü yaptırmak ne bileyim farklı bir sürü türde gelen veriyi inceletmek en mantıklısı olacaktır. Konu hakkında çok net bilgilere sahip olmadığımı daha öncede söylemiştim yanlışım varsa yine de kusura bakmayın.
Fullstack Developer
-
Beyin fırtınası yapmakta fayda var.
firewall'lık bir durum yok. Ben bir exe ye ait byte'ların başına jpeg header'i koyup pekala image/jpeg mime type'ı ile post ederim. Kaldı ki -hosting kullanılıyorsa- kod ile firewall configurasyonunu yapamayacağımıza göre bunun da bir önemi yok zaten.
diğer konu
senaryo 1:
kullanıcının upload ettiği görselleri sitemizde gösteriyorsak, zaten resize, watermark image gibi işlemler yapacağız. Hele resize'a mecburuz. Çünkü kullanıcı 2mb lık ya da boyutları site tasarımımıza uymayan bir resmi upload ettiğinde bunu olduğu gibi siteye koyamayız. Yani bitmap işlemi hata kontrolü için değil, bir mecburiyet.
senaryo 2:
görselleri sadece depolamak amacı ile alıyorsak, bu durumda zaten antivirus taramasından geçirmek gerekecek, ya da olduğu gibi database'e yazacağız ve dosyayı download edenleri kaderine terk edeceğiz. Bu durumda da mime type'ın bir -güvenlik açısından- önemi kalmayacak.
e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
- Düzenleyen Önay YALÇINERModerator 6 Eylül 2016 Salı 05:19
-
Evet sanırım senaryolara uygun yol dediğiniz gibi. Benim aklım biraz pdf ve office dosyalarına gitti. Bir ara UTM tarzı firewaller kullanıyorduk pishing/malware ayarları vardı. Hem maillerde hemde requestlerde paketleri antivirüs ve çeşitli algoritmalarla doğrulamaya çalışmaktaydı. Gerçi onun yaptığı işte sizin dediğiniz şey sanırım bir şekilde dosyayı açıp açamadığına bakıyordur. Resim dosyasının byte lerinden normalde ne anlayacak herhalde resim editlerken kullanılan structurelar varmı onları gözden geçiriyordur. Hmm mantıklı geldi şimdi bana dediğiniz. Fikrimi sizin dediğinizden yana değiştiriyorum :) teşekkürler.
Fullstack Developer
-
Bilgisini esirgemeyen herkese teşekkürler.
"Basit çözüm, gelen byte lara bitmap muhamelesi yaparsın (resize vs.) hata alırsan resim değildir, bitti." bu satırda gülümsedim gerçekten mantıklı :)
- Düzenleyen Cihan YakarMVP, Moderator 6 Eylül 2016 Salı 05:47
-
Bilgisini esirgemeyen herkese teşekkürler.
"Basit çözüm, gelen byte lara bitmap muhamelesi yaparsın (resize vs.) hata alırsan resim değildir, bitti." bu satırda gülümsedim gerçekten mantıklı :)
İki kereye "image olarak açmayı denersin" dedim bu kadar etkili olmadı ya la...Fullstack Developer
-
Bilgisini esirgemeyen herkese teşekkürler.
"Basit çözüm, gelen byte lara bitmap muhamelesi yaparsın (resize vs.) hata alırsan resim değildir, bitti." bu satırda gülümsedim gerçekten mantıklı :)
İki kere "image olarak açmayı denersin" dedim bu kadar etkili olmadı ya la...