Bu fileuploading senaryo güvenli mi?

6 Cevap php

Merhaba, bu tamamen güvenli ya da değil mi? Ben yeni bir proje için tamamen güvenli fileuploading senaryoyu istiyorum. Tavsiyesi teşekkürler. İşte buldum biridir:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

6 Cevap

Mime tipleri için $ _FILES ["file"] ["type"] güvenemeyiz. Bu sahte olabilir, böylece bilgi tarayıcı tarafından gönderilir. Bu mime_content_type veya Fileinfo ile mime türlerini kontrol etmek en iyisidir.

Farkında olmak bir şey bir security risk içine görüntüleri açabilirsiniz, MIME Type Detection in Internet Explorer olduğunu.

Bir dosya doğru uzantısı ve dosya kendisi <html>, <body>, vb gibi belirteçleri içeriyorsa, görüntü mim türü ile servis bile, IE (7 ve üstü) olabilir Hala olası bir XSS açığı açılması, HTML olarak yorumlayabilir.

Virüsler dosyaları hala üzerinden almak için gidiyoruz.

Bana ok görünüyor.

Dosyalar taranır sürece, dosya yükleme yapmak için% 100 güvenli bir yolu yok tamamen yoktur. PHP bir betik dili değil, bir güvenlik programı bir dil olduğunu unutmayın. Bu yüzden bunu yapmak kadar güvenlidir. Tuhaf uygulamanız için tanımlamak ne olmak - Bu boyutu ve türü sınırlayıcı yanı sıra, dedi, yapmanız mümkün olabilir tek şey garip dosya adları için kontrol etmektir.

Eğer virüs (virüs için yahoo taramalar attatchments gibi) dosyaları taramak için bir üçüncü taraf hizmeti kullanabilirsiniz eğer, daha iyi uygulama yapmak istiyorum, ama kafamın üst kapalı herhangi bilmiyorum.

Bu bir güvenlik analisti aşırı bilgiçlik taslayan ramblings olabilir, ama örneğin düzenli ifadeler kullanarak, tüm bu alanları doğrulamak gerekir. Ve içerik de. Aksi takdirde sadece emin olamaz. Bir oldukça kolay bir 'image / gif' sonra belirli bir Apache işleyici geçerli bir komut olarak tedavi etmek için tercih edebileceğiniz bunun bir komut dosyası gömmek olarak bir dosyayı kabul içine bu kodu kandırmak olabilir! (Belki değil varsayılan, ancak gelecekte bir 'serin yeni Apache modül' yüklediğinizde ...)

Her şeyin istediğiniz ve hiçbir şey daha fazla veya daha az tam olarak nasıl yapmak için her şeyi doğrulayın: Bir 'tamamen' güvenli komut istiyorum.