محدود کردن ارسال فایل در php (امنیت آپلود فایل)

PHP

توسط saber2 در 4 سال پیش
0 2.3k 6 4 سال پیش
saber2danielcomodorockstar
0

سلام دوستان مهندسان اساتید سافت افزار

یه سوال داشتم بی زحمت کمکم کنید:) ببخشید چجوری میشه برای فایل ارسالی کاربر محدودیت گذاشت و اون رو کامل بررسی کرد تا مطمئن شویم فایلش مشکلی نداره و خطر ناک نیست؟ من کد پایینو بلدم ولی میخام بیشتر رو فایل کار بشه و بطور حرفه ای و تخصصی بررسیش کنم میشه؟ باید بشه :|

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& in_array($extension, $allowedExts)) {
  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";
}
?>

لطفا کمک کنید ممنون مهندسین عزیز:)

آخرین ویرایش: 30-09-2014 ساعت 19:12، توسط Daniel
0

اسکریپتت بد نیست برای امنیت بیشتر میتونی از GD استفاده کنی اونطوری دیگه میطونی مطمئن باشی اما فقط واسه تصاویر میشه ازش استفاده کرد.

0

ممنون دادا جی دی چیه؟ من کلا منظورمه فقط عکس نی برای بالا بردن امنیت بیشتر فایلای دریافتی میخام!!!! ممنون:SoftAfzar:

0

کد بالا که مروبوط به سایت w3s هست که اومده از mime type فایل های مورد نظرش رو جهت آپلود فیلتر کرده... در زیر چند منبع برای mime type میزارم اگر خواستین مطالعه داشته باشین:Complete MIME Types List - FreeFormatter.comManual:MIME type detection - MediaWikiPHP / Mime Types - List of mime types publically available? - Stack Overflowphp - Best way to check mimetype and upload a file - Code Review Stack ExchangeManual:Configuring file uploads - MediaWikiبجز استفاده از این روشی که گفته شد روش های دیگه ای هم وجود داره. مثلا من خودم از کدی شبیه به کد زیر جهت آپلود استفاده میکنم:

$filename = basename($_FILES["file"]["name"]);
$filesize = $_FILES["file"]["size"];
$filetmp = $_FILES["file"]["tmp_name"];
$fileerror = $_FILES["file"]["error"];
allowedExts = array("zip", "rar", "ZIP", "RAR");
$maxfilesize = 2*1024*1024;
$ext = substr($filename, strrpos($filename, '.') + 1);
if(!in_array($ext, $allowedExts)){

   $file_Err = "فرمت فایل غیرمجاز می باشد. لطفا تنها از فرمت های zip و rar استفاده کنید.";
   $Error++;

}elseif($filesize > $maxfilesize){

   $file_Err = "حجم فایل بیشتر از حد مجاز است. حداکثر حجم قابل قبول 2 مگابایت است.";
   $Error++;

}elseif($fileerror > 0){

  $file_Err = "خطا:".$_FILES["file"]["error"];
  $Error++;

}elseif($fileerror == 0){

    if (file_exists("uploads/abstracts/" . $_FILES["file"]["name"])) {

      $file_Err = $_FILES["file"]["name"] . "موجود می باشد.";
      $Error++;

    }else{

      move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/abstracts/" . $rename_file.".".$ext);

    }
  }

این یه مثاله در کد بالا پسوند فایل از فایل جدا میشه مثلا فایل softafzar.rar پسوند rar فایل ازش جدا میشه و در متغییر $ext قرار میگیره و بعدش بررسی میشه که آیا این پسوند در بین پسوند های مجاز که در آرایه allowedExts تعریف شده وجود داره یا خیر و... برای امنیت هم از آپلود فایل های exe و dll و فایل هایی که اجرایی هستند و امکان خطر دارن جلوگیری کنید بیشتر هم از فرمت rar , zip در صورت امکان استفاده کنید

0

واقعا ممنونم آقای روک استار میگم بغیر چک کردن و محدود کردن حجم و پسوند فایل ها راه های دیگه ای هست بشه امنیت رو بالا برد؟؟؟

ممنون

0

اگر فقط عکس داری میتونی با کتابخانه GD اینکارو انجام بدی. GD میاد دوباره فایل رو به اصطلاح Save as میکنه و از این طریق مطمئن میشیم که فایل سالمه و خطری نداره.

0

اینم آموزش: [url]http://www.softafzar.net/thread2511.html/[/url]

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید