none
Dosya kontrolü mvc RRS feed

  • 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. 
    4 Eylül 2016 Pazar 19:32

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
    5 Eylül 2016 Pazartesi 13:46
  • Bunun zararı ne ki? Zararlı olabilmesi için onun uzantısının tekrar exe haline getirilip çalıştırılması lazım. Yine de endişeleniyorsan Image olarak açıp açamadığına bakabilirsin.
    • Yanıt Olarak İşaretleyen NScoder54 6 Eylül 2016 Salı 08:05
    4 Eylül 2016 Pazar 19:45
    Moderatör

Tüm Yanıtlar

  • Bunun zararı ne ki? Zararlı olabilmesi için onun uzantısının tekrar exe haline getirilip çalıştırılması lazım. Yine de endişeleniyorsan Image olarak açıp açamadığına bakabilirsin.
    • Yanıt Olarak İşaretleyen NScoder54 6 Eylül 2016 Salı 08:05
    4 Eylül 2016 Pazar 19:45
    Moderatör
  • Güvenlik problemi çıkarcağından değil aslında bende .jpg uzantısındayken çalışmayacağını biliyorum ama bu yüklenen dosya kabul edildiğinde bozuk resim olarak görünüyor o yüzden yani.
    4 Eylül 2016 Pazar 20:56
  • 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
    5 Eylül 2016 Pazartesi 13:46
  • Çok teşekkür ederim.
    5 Eylül 2016 Pazartesi 15:59
  • 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

    Upload sırasında Content-Type headerı istemci tarafından belirlenir. Oraya istediğini yazabilir. Kısaca bu yöntem aslında çalışmaz.
    5 Eylül 2016 Pazartesi 19:55
    Moderatör
  • 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

    5 Eylül 2016 Pazartesi 20:18
  • 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

    5 Eylül 2016 Pazartesi 20:46
    Moderatör
  • 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ı :)

    5 Eylül 2016 Pazartesi 21:49
  • Ö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

    6 Eylül 2016 Salı 04:51
  • 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


    6 Eylül 2016 Salı 05:16
    Moderatör
  • 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

    6 Eylül 2016 Salı 05:45
  • 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...
    6 Eylül 2016 Salı 05:46
    Moderatör
  • 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...
    Valla demiş :)

    Fullstack Developer

    6 Eylül 2016 Salı 05:49
  • 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...
    Hakketen  demişsin neden gözden kaçtı anlamadım :) kusura bakma
    6 Eylül 2016 Salı 08:05