راهکارهای افزایش امنیت آپلود فایل در PHP
#1
Note 
سلام . در این پست آموزشی میخوام بصورت ساده و تیتر وار به نکاتی اشاره کنم که با استفاده از اونها  امنیت اسکریپت خودتون رو بالا ببرید.

1- فقط به کاربران عضو اجازه آپلود فایل رو بدید. شما میتونید از کد کپتچا هم برای جلوگیری از کارهای مخرب بات ها استفاده کنید.
2- اول از همه در فرم آپلودتون مقادیر MAX_FILE_SIZE ٬ upload_max_filesize و max_file_uploads رو محدود کنید:
کد php:
ini_set('post_max_size''40M'); 
ini_set('upload_max_filesize''40M');
ini_set('max_file_uploads'10); 

با استفاده از کد زیر هم میتونید حجم فایل رو چک کنید:
کد php:
if ($fileInput['size'] > $sizeLimit

3- با استفاده از تابع move_uploaded_file() فایل آپلود شده رو به مکان مناسبی از سرور انتقال بدید و همچنین بوسیله تابع is_uploaded_file() از انتقال فایلها مطمئن بشید.
4- هیچوقت فایل رو با نام اصلی خودش در سرور ذخیره نکنید. میتونید با استفاده توابع تولید رشته یا عدد تصادفی نام فایل رو عوض کرده و بعد ذخیره کنید.
کد php:
$uploadStoragePath '/file_storage';
$fileInput $_FILES['image'];

if (
fileInput['error'] != UPLOAD_ERR_OK)
 
   //handle upload error here

$temporaryName $fileInput['tmp_name'];
$extension pathinfo($fileInput['name'], PATHINFO_EXTENSION);

$name bin2hex(mcrypt_create_iv(32MCRYPT_DEV_URANDOM)); //true random id

move_uploaded_file($temporaryName$uploadStoragePath.'/'.$name.'.'.$extension); 

5- فایلهای آپلود شده رو به فولدری بیرون از public_html انتقال بدید. این کار باعث میشه تا هیچ فایلی قابلیت اجرا شدن رو نداشته باشه. همچنین با استفاده از فایل htaccess. میتونید از اجرا شدن فایلهای php جلوگیری کنید:
کد:
   SetHandler none
   SetHandler default-handler
   Options -ExecCGI
   php_flag engine off
فایل htaccess. رو باید داخل فولدر آپلود قرار بدید.

6- شما باید نوع فایلهایی که توسط کاربر(که میتونه یک هکر باشه)  آپلود میشه رو قبل از ذخیره چک کنید. به مثال زیر توجه کنید:
کد php:
// FILEINFO_MIME set to return MIME types, will return string of info otherwise
$fileinfo = new finfo(FILEINFO_MIME);
$file $fileinfo->file($_FILE['filename']);

$allowed_types = array('image/jpeg''image/png');
if(!
in_array($file$allowed_types))
{
 
   die('Files of type' $file ' are not allowed to be uploaded.');
}
// Continue 
7- میتونید از یک انتی ویروس برای پیدا کردن فایلهای آلوده استفاده کنید.
8- برای حصول اطمینان از آلوده نبون تصاویر میتونید از Imagick یا  GD استفاده کنید:
مثالی از Imagick:
کد php:
try {
 
   $uploadedImage = new Imagick($uploadedFile);
 
   $attributes $uploadedImage->identifyImage();
 
   $format $image->getImageFormat();
 
   var_dump($attributes$format);
} catch (
ImagickException $exception) {
 
   //handle damaged or corrupted images


+ اگر شما هم راه دیگری برای افزایش امنیت اسکریپت آپلود دارید پیغام بدید تا اضافه بشه.

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

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  خدمات سئو سایت vayas 0 122 02-08-2016 ساعت 10:25
آخرین ارسال: vayas
Note کد بدست آوردن رتبه سایت WWWorker 0 748 07-02-2015 ساعت 09:40
آخرین ارسال: WWWorker
Note محدود کردن ارسال فایل در php (امنیت آپلود فایل) saber2 6 1,218 30-09-2014 ساعت 20:11
آخرین ارسال: 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 922 29-05-2014 ساعت 22:12
آخرین ارسال: REza mAX
Note ساخت آمار بازدید سایت Mahmoud 2 508 14-04-2014 ساعت 10:08
آخرین ارسال: SAMAN ELITE
Note آموزش گذاشتن کپچا(Captcha) در سایت SOFTAFZAR 1 1,274 06-02-2014 ساعت 22:46
آخرین ارسال: Wp script
Note Ionize CMS سیستم مدیریت محتوای بر پایه CodeIgniter Daniel 0 408 29-01-2014 ساعت 14:34
آخرین ارسال: Daniel

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