Yürütülebilir görüntüleri blok yükleme (PHP)

4 Cevap php

Bir kullanıcı bir avatar resmi yüklenenler yoluyla istismar oluşturmak için çalışıyor benim dikkatimi geldi. Bir kullanıcı söyleyerek onların Norton Anti-virüs bir haber almak olduğunu bana bildirdi bu keşfedildi "HTTP Şüpheli Çalıştırılabilir Resim İndirme." Bu uyarı, kullanıcının avatar resmi başvuru yapıldı. Ben aslında bilgi veya böyle bir şey çalmakla arada bir şey elde sanmıyorum, ama ben delik yeterince uzun açık kalırsa mümkün olabilir varsayalım. Ben görüntü dosyalarını yüklemek için PHP kullanmak ve tarih olmak dosya png, jpg, bmp, gif veya olup olmadığını kontrol edin.

Bu bir görüntü olup olmadığını denetler kodu:

$allow_types = array('image/jpeg', 'image/png', 'image/gif', 'image/jpg', 'image/png', 'image/bmp', 'image/bitmap');
if (in_array($this->tmp_image['type'], 
$this->allow_types)) {
   return true;
}

4 Cevap

Zararlı dosyaları yükleme önlemek için hiçbir yolu yoktur. Eğer yerine hakkında bakım için neler gerekir bu dosyaları ele nasıl.

Böyle yeniden tasarruf görüntü dosyası olarak Öneriler mahkumdur. Onlar bilinen bir görüntü kompresör çalıştırmak sonra saldırganın istediği sırayla böylece bit sıralayarak bu tür manipülasyon atlamak mümkündür.

Görüntüleri ve zararlı dosyaları birleştirmek için bir çok yol vardır. Kötü niyetli bir dosya bir çalıştırılabilir olabilir, ya da sadece bir tarayıcı tarafından yorumlanması alır JavaScript içerebilir. Ayrıca, nasıl resmin tip değildir yeniden dosyaları kaydetmek gerekiyor?

Dosya yükleme tutarken, biri aşağıdakilerden dikkat etmelisiniz.

  • Sunucu alanı dışında çalışmaz böylece kullanıcı başına yüklemek için bayt miktarını sınırlayın.

  • Sunucu inodes tükendi böylece kullanıcı başına yüklemek için dosyaların miktarını sınırlayın.

  • Doğrudan erişilebilir değildir böylece belge kök yukarıdaki dosyaları saklamak.

  • PHP-proxy komut dosyası aracılığıyla dosyalarınızı hizmet gibi bir şey yazmak:

    $data = file_get_contents('/home/account/files/file.png');
    header('Content-Type: <span class="posthilit">image</span>/png');
    header('Content-Length: '.strlen($data));
    header('X-Content-Type-Options: nosniff');
    echo $data;
    
  • Bir uzantısı olmadan tamamen rastgele bir adı olması yüklenen dosyaları yeniden adlandırın. Eğer dosya adı (ve uzantısı / türü) saklamak gerekiyorsa, veritabanında bilgilerini saklayabilirsiniz.

  • Gerekirse, kullanıcı bunu için bir izin var sadece dosyaları hizmet vermektedir.

  • / Yüklediğiniz dosyaları çalıştırmak asla eklemeyin. Bu içerebilir veya PHP gerektiren herhangi demektir. Onlara da dahil olmak üzere hiçbir HTML komut dosyası etiketleri veya stil etiketleri. Hayır Apache onlara dahil komutları ekleyin. Ve benzeri.

  • Eğer mümkünse, başka kökenli dosyaları hizmet vermektedir. Bu çoğunlukla Flash ile ortaya kökenli sorunları ortadan kaldırır. Farklı bir bağlantı noktası, bir alan adı veya IP-adresini kullanarak da gayet iyi. Alt alan adlarından hizmet tehlikeli ve IP adresleri ile uygulama olur biraz zor (yani, yalnızca IP üzerinden, etki yoluyla dosyaları hizmet edemez ve IP üzerinden siteyi hizmet, ancak bir etki yoluyla olamaz).

  • SLP ve RFI dikkat edin. fopen(), read(), vb gibi fonksiyonların içinde dosya adını kullanmadan önce dosya adlarını yeniden adlandırabilir ve gerektiği gibi / bir dizin değerlerini sterilize doğrulamak.

En kolay çözüm yeniden örnek resim etmektir. Basit bir görüntü işleme lib (GD) alın ve yük görüntüyü yeniden kaydetmek, etkin herhangi bir yürütülebilir içeriği şerit gerekir, ya da görüntü sadece bir yeniden adlandırılmış exe ise sadece zor-başarısız.

verileri geçtiğini kontrol etmek imagecreatefromjpeg (ve diğer imagecreatefrom *) kullanmak gerçek görüntüdür. exe yummayacağız.

i iyi yaklaşım dosya yükleme bir görüntü olduğunu doğrulamak olacağını düşünüyorum. onun, daha sonra kullanıcı hatası değilse, sadece başka bir sigara doğrulanmış veri girişi ile ilgili olarak

see this link http://www.bitrepository.com/how-to-validate-an-image-upload.html