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

بازدید67kپست ها6آخرین فعالیت9 سال پیش
0
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.com
Manual:MIME type detection - MediaWiki
PHP / Mime Types - List of mime types publically available? - Stack Overflow
php - Best way to check mimetype and upload a file - Code Review Stack Exchange
Manual: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]

سوال برنامه نویسی دارید؟

ندونستن عیب نیست، نپرسیدن چرا!

خوش آمدید

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