محدود کردن ارسال فایل در php (امنیت آپلود فایل)
#1
Note 
سلام دوستان مهندسان اساتید سافت افزار

یه سوال داشتم بی زحمت کمکم کنیدSmile
ببخشید چجوری میشه برای فایل ارسالی کاربر محدودیت گذاشت و اون رو کامل بررسی کرد تا مطمئن شویم فایلش مشکلی نداره و خطر ناک نیست؟
من کد پایینو بلدم ولی میخام بیشتر رو فایل کار بشه و بطور حرفه ای و تخصصی بررسیش کنم میشه؟ باید بشه :|
کد php:
<?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";
}
?>
لطفا کمک کنید ممنون مهندسین عزیزSmile

آخرین ویرایش: 30-09-2014 ساعت 19:12، توسط Daniel
پاسخ
#2
Note 
اسکریپتت بد نیست برای امنیت بیشتر میتونی از GD استفاده کنی اونطوری دیگه میطونی مطمئن باشی اما فقط واسه تصاویر میشه ازش استفاده کرد.

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

پاسخ
#4
Note 
کد بالا که مروبوط به سایت 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
بجز استفاده از این روشی که گفته شد روش های دیگه ای هم وجود داره. مثلا من خودم از کدی شبیه به کد زیر جهت آپلود استفاده میکنم:
کد php:
$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($filenamestrrpos($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 در صورت امکان استفاده کنید

توتال دیزاین
مرجع تخصصی طراحی وب سایت ، وب اپلیکیشن و سیستم های مدیریت همایش, ویندوز اپلیکیشن
و هر آنچه شما بخواهید...
پاسخ
#5
Note 
واقعا ممنونم آقای روک استار
میگم بغیر چک کردن و محدود کردن حجم و پسوند فایل ها
راه های دیگه ای هست بشه امنیت رو بالا برد؟؟؟

ممنون

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

پاسخ
#7
Note 
اینم آموزش:

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  خدمات سئو سایت vayas 0 121 02-08-2016 ساعت 10:25
آخرین ارسال: vayas
Note کد بدست آوردن رتبه سایت WWWorker 0 746 07-02-2015 ساعت 09:40
آخرین ارسال: WWWorker
Note راهکارهای افزایش امنیت آپلود فایل در PHP Daniel 0 1,254 30-09-2014 ساعت 20:10
آخرین ارسال: Daniel
Note نحوه فرستادن ایمل به کاربر و مدیر سایت hasti 1 477 11-07-2014 ساعت 22:08
آخرین ارسال: Comodo
Note نحوه ایجاد مقادیر در صورت عدم موجودیت در جدول sixi 1 406 19-06-2014 ساعت 13:50
آخرین ارسال: SOFTAFZAR
Note نمایش تصاویرnavigationبه وسیله phpدرheaderسایت hasti 1 493 07-06-2014 ساعت 18:54
آخرین ارسال: C0der
Note طراحی یک سایت خبری ساده با php pHp king 4 921 29-05-2014 ساعت 22:12
آخرین ارسال: REza mAX
Note ساخت آمار بازدید سایت Mahmoud 2 508 14-04-2014 ساعت 10:08
آخرین ارسال: SAMAN ELITE
Note آموزش گذاشتن کپچا(Captcha) در سایت SOFTAFZAR 1 1,273 06-02-2014 ساعت 22:46
آخرین ارسال: Wp script
Note Ionize CMS سیستم مدیریت محتوای بر پایه CodeIgniter Daniel 0 408 29-01-2014 ساعت 14:34
آخرین ارسال: Daniel

کاربرانِ درحال بازدید از این موضوع:   1 مهمان