Gif / jpg / png / pdf / doc için yapı PHP aktarıcı, wmv dosyaları, uygulanabilir, veya bir şey satın almalıyım?

7 Cevap php

Ben bir Mac sunucu var ve kullanıcılar görüntü, belge ve hatta video dosyalarını yüklemek için izin PHP kodu inşa ediyorum. Bu kesinlikle beni sinir aldı Araştırma, ben yüklenen içeriklerin virüs özgür olmak istiyorum.

Şey kendimi büyük bir meydan okuma olacak bina mı? Bunu yapmak istiyorsunuz, veya bazı OS veya OTS ürünü bulmak istiyorsunuz? (Ve sen tavsiye herhangi biliyor musunuz?)

7 Cevap

Kavramsal olarak, ne bahsediyoruz oldukça basittir. Kabul ve yüklenenler işleme kesinlikle ben sizin için önceden oluşturulmuş bir çözümü satın alma konusunda endişelenmenize gerek bir şey değil, oldukça basittir.

(Görüntüleyici uygulama gerçekten yoksul ve onları bir şekilde kod çalıştırmak izin verir sürece - "Internet Explorer" olarak da bilinir), genel görüntüler ve videolar gibi şeyler gerçekten "virüs" olamaz, ama yine de virüs taraması onlara gerçekten zor değilse Eğer istiyorum. Eğer başarısız sadece (bir şey gibi Clam AV) sunucu üzerinde çalışan bir komut satırı tarayıcı bulmak ve bir dosya karşıya olduğunda, tarayıcı aracılığıyla çalıştırın ve yükleme reddetmek (ve olay log) tarama.

Çok büyük dosyaları karşıya iseniz, kullanıcıların yüklenen ne kadar dosya görebilirsiniz, böylece aynı zamanda Flash yükleme / durum çubuğunu düşünebilirsiniz. SWFUpload Bunun için iyi bir seçimdir.

PHP böyle bir şey yaparak ClamAV ile dosyaları tarayabilir:


$out = '';
$int = -1;
exec('/usr/local/bin/clamscan --stdout /path/to/file.ext', $out, $int);

if ($int == 0)
{
  print('No virus!');
}

/*
Return codes from clamscan:
 0 : No virus found.

       1 : Virus(es) found.

       40: Unknown option passed.

       50: Database initialization error.

       52: Not supported file type.

       53: Can't open directory.

       54: Can't open file. (ofm)

       55: Error reading file. (ofm)

       56: Can't stat input file / directory.

       57: Can't get absolute path name of current working directory.

       58: I/O error, please check your file system.

       59: Can't get information about current user from /etc/passwd.

       60: Can't get information about user '' from /etc/passwd.

       61: Can't fork.

       62: Can't initialize logger.

       63: Can't create temporary files/directories (check permissions).

       64: Can't write to temporary directory (please specify another one).

       70: Can't allocate memory (calloc).

       71: Can't allocate memory (malloc).

*/

Kısa cevap: hiçbir şey satın almayın. Bu kendinizi kodlama kazanacaktır başarı deneyim ve duygusu çok daha buna değer.

Uzun cevap: kullanıcı girişi hiçbir şekilde güvenmeniz genellikle kötü bir fikirdir. Ancak, kullanıcı veri ile ne hakkında mantıklı olmak her zaman gitmek için en iyi yoldur. Eğer * aptalca şeyler yapmazsanız, iyi olacak, ve size deneyim derece elde edersiniz.



( * I know that's a little ambiguous, but hey, try identifying a mistake before you've made it. I know I rarely can. ;)

Ben Mootools 1.2.1 digitarald gelen FancyUpload kullanarak hemen aynı tür inşa ediyorum

Bu örnek kontrol edin: http://localhost/fancyupload/showcase/photoqueue/ o kadar soğuk olduğunu görmek için.

Sadece (GET / POST parametreleri kullanarak! Sizin oturum çerezleri çalışmaz.) Flash oturumu geçmek için nasıl okumak ve filetype bazı kontroller yapmak emin olun.

Şahsen, benim kullanıcıların video bulunuyor karşıya izin istemem. Sadece youtube kullanımı ve bu şeyler embed.

Yüklediğiniz oluyor Thet şeyler küçük resimlerini yapmak istiyorsanız Oh evet, ve, ImageMagick Ghostscript ile birlikte sunucu üzerinde yüklü için gidin. Imagemagick sonra bile PDF yıllardan gelen küçük üretebilirsiniz!

"Bir şey kendimi büyük bir sorun olacak bina mı?" Evet, öyle. Üçüncü taraf çözüm için fason olarak büyük, ama ne burada kod istiyorum belki bir php web script kod alabilirsiniz en tehlikeli şey değil: Kullanıcıların sunucuya dosya yüklemek için izin. Eğer sunucuya php scriptler yüklemelerini engellemek için kabul olacak dosyaları filtrelemek için extremelly dikkatli olmak gerekir. Filtreleme sırasında insanların yaptığı ortak hatalar şunlardır:

  1. Tüm filtre değil.
  2. Yanlış normal ifadeler dayalı filtre kolayca bypassables.
  3. Is_uploaded_file ve işlev fonksiyonlarını kullanarak bile SLP açıklarına alabilirsiniz.
  4. (Bunun yerine küresel değişkenleri kullanarak) $ _FILES dizi kullanarak değil RFI vulns alabilirsiniz.
  5. Bu browswer geliyor gibi filtre fakeable $ _FILES diziden, türüne göre.
  6. Sunucu tarafında dayalı filtre sihirli dosyaları (yani bu içeriği GIF8 ile bir dosya bir görüntü / gif dosyası olarak tanımlanır ama mükemmel bir php komut dosyası olarak yürütülür) içeren ne simüle aldatmasın, mim-tipi kontrol
  7. Explicitely izin olanların listesiyle karşı tehlikeli dosyaların veya uzantılarının kara listeye kullanın.
  8. Php yürütülebilir uzantıları yeniden tanımlıyor. Htaccess dosyalarını (yani txt) upload izin Yanlış apache ayarları ..

I could go, ancak ben sormadan önce zaten korkmuş düşünüyorum :)

Virüsler şey başı olarak, evet, sadece bir AV çalıştırın.

İşte yüklenen dosyaları işlemek için kod sadece bu yüzden fikir olsun, var:

foreach ($_FILES as $file) {
  if (!$file['error']) {
    move_uploaded_file ($file['tmp_name'], 'uploads/'. $file['name']);
  } elseif (4 != $file['error']) {
    $error_is = $file['error'];
    // do something with the error :-)
  }
}

header ('Location: ...'); // go to the updated page, like, with the new files
die;

Keith Palmer küçük bir script suggestes.

Use clamdscan instead of clamscan. clamdscan communicates with setup clamd (clamav daemon), while clamscan is a standalone application so virus signatures are loaded EACH TIME you call it, this could be generate quite a big load on your server.

Ayrıca Clamuko'yu deneyebilirsiniz yanı sıra (bu size on-access tarama verir), böylece sadece Calmuko tarafından gözlemlenen dir içine açılan dosyaları olabilir.

Eğer çekirdeğin içine modülleri sokmayın eğer, muhtemelen, daha iyi bir çözüm olabilir SİGORTA-tabanlı ClamFS da vardır.