• راهکارهای افزایش امنیت آپلود فایل در 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 482 02-08-2016 ساعت 10:25
    آخرین ارسال: vayas
    Note کد بدست آوردن رتبه سایت WWWorker 0 1,117 07-02-2015 ساعت 09:40
    آخرین ارسال: WWWorker
    Note محدود کردن ارسال فایل در php (امنیت آپلود فایل) saber2 6 1,697 30-09-2014 ساعت 20:11
    آخرین ارسال: Daniel
    Note نحوه فرستادن ایمل به کاربر و مدیر سایت hasti 1 675 11-07-2014 ساعت 22:08
    آخرین ارسال: Comodo
    Note نحوه ایجاد مقادیر در صورت عدم موجودیت در جدول sixi 1 541 19-06-2014 ساعت 13:50
    آخرین ارسال: SOFTAFZAR
    Note نمایش تصاویرnavigationبه وسیله phpدرheaderسایت hasti 1 660 07-06-2014 ساعت 18:54
    آخرین ارسال: C0der
    Note طراحی یک سایت خبری ساده با php pHp king 4 1,161 29-05-2014 ساعت 22:12
    آخرین ارسال: REza mAX
    Note ساخت آمار بازدید سایت Mahmoud 2 673 14-04-2014 ساعت 10:08
    آخرین ارسال: SAMAN ELITE
    Note آموزش گذاشتن کپچا(Captcha) در سایت SOFTAFZAR 1 1,483 06-02-2014 ساعت 22:46
    آخرین ارسال: Wp script
    Note Ionize CMS سیستم مدیریت محتوای بر پایه CodeIgniter Daniel 0 504 29-01-2014 ساعت 14:34
    آخرین ارسال: Daniel

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