11
تشکر

آپلود مطمئن فایل در PHP

آپلود مطمئن فایل در PHP

آپلود مطمئن فایل در PHP

این مطلب در دسته بندی مطالب پی اچ پی است. پی اچ پی را در اینجا دنبال کنید.

در زبان های سمت سرور همیشه خلاء هایی وجود دارد که باعث میشود هکرها از این طریق به سایت مورد نظر حمله بکنند. یکی از این خلاء ها که میشود به سادگی آن را بر طرف کرد آپلود فایل ها است. در آپلود فایل هکر میتواند به سادگی فرمت یک اسکریپت را به png تغییر داده و در حالی که سایت فکر میکند این یک عکس است آن را آپلود میکند. و باعث دردسر خواهد شد.

در این مطلب به راه های مقابله با این روش خواهیم پرداخت.


تغییر دادن اسم فایل

ابتدا شما باید پسوند فایل را از نام خود فایل جدا کنید. در مرحله بعد یک اسم تصادفی برای آن بسازید و در مرحله آخر پسوند را دوباره به انتهای آن بچسبانید. مثلا اگر هکر فایل test1.php.png را آپلود کرده باشد این فایل به طور مثال به fsf464sdfs.png تبدیل خواهد شد. و دیگر اثر آن از بین میرود.


چک کردن سایز فایل

شما باید یک حداقل و حداکثر برای سایز فایلهایتان در نظر بگیرید. مثلا برای عکس حداقل 100kb و حداکثر 250kb باشد. در اینصورت شما هم از فایلهای با حجم بالا جلوگیری میکنید و هم از ورود فایلهای متنی جلوگیری خواهید کرد. شما کدام فایل متن را میشناسید که 100kb باشد. پیدا میشود ولی باز هم میتوان این را یک مزیت دانست.


چک کردن نوع فایل

یکی از کارهای مهم چک کردن نوع فایل است. در این مرحله شما نباید به type آن بسنده کنید بلکه باید به MIME هم توجه مهمی شود. البته راه هایی هم برای دور زدن این روش وجود دارد اما امنیت را بالا خواهد برد.

نکته: هیچ وقت از کاربران نخواهید که یک فایل فشرده را برای شما آپلود کنند. دلیل آن بسیار واضح است.

  • سمیه می‌گه:

    اما درباره آپلود عکس بهترین روش اینه که بعد از آپلود عکس همون عکس رو خودمون بسازیم و عکس آپلودی کاربر رو حذف کنیم (برای عکس های متحرک چیزی ندیدم ) اینجوری احتمال این که داخل محتوای عکس از کد php استفاده شده باشه رو هم حذف میکنیم

    من برای سایتهایی که مینویسیم از این روش استفاده میکنم بعضی وقتا اندازه و طول و عرض عکس رو هم لحاظ میکنم و هر جلوی گونه نفوذ از طریق آپلود عکس رو میگیرم

    مشکلی که میمونه آپلود فایلهای دیگه هستش مثلا فایل هایی که کاربران پیوست میکنن pdf , doc و این فایلها واقعا نمیدونم چیکارشون کنم اگه مطالبی در این باره توی سایت بزارید عالی میشه

  • سمیه می‌گه:

    تا اینجا رو میدونم که توی دنیا (مخصوصا کامپیوتر) چیزی به اسم نشد نداریم

    سوالی که برام جالبه اینه که چطوری این فایلهای فشرده رو که اکسترکت کردیم ممکنه خطرناک باشه در صورتی که نه اجراشون کردیم نه بازشون کردیم ؟

    چیزی که به نظرم میاد اینه که شاید فایل zip باک داشته باشه که بعد بلافاصله بعد از اکسترکت کردن فایل اون رو اجرا کنه ولی هر چی جستجو کردم چیزی پیدا نکردم

    میشه بگید چطوری ممکنه فایل zip رو اکسترکت کردیم خطر ساز باشه ؟

    • محسن شفیعی می‌گه:

      در صورتی که داخل سرور اکسترکت بشه، خطرناکه. من مواردی رو در مد نظرم هست که بعد از اکسترکت کردن فایل زیپ، از محتویات اون فایل استفاده مستقیم میشه.

    • سمیه می‌گه:

      آخه اونجا که گفتید “حتی اگه ابتدا فایل فشرده، دانلود، بعد درون سیستم غیر سرور اکسترکت بشه بازم خطرناکه”

      گفتم شاید چیزی رو از قلم انداختم یه لحظه فکر کردم شاید موقع اکسترکت ممکنه برنامه یا کلاسهای مربوط به اکسترکت باک داشته باشن و کسی که فایلهای zip رو می فرسته از این باکها استفاده کرده باشه و موقع اکسترکت فایلش اجرا بشه (مثل چیزی تو مایه های باک های pdf , doc )

      تا اونجا که مطالعه کردم بهترین روش برای محافظت از کدها و فایلهای آپلودی کاربران اینه که فایلهایی که کاربران آپلود میکنن رو در قسمت دیگه ای آپلود کنیم و دسترسی پردازش رو از اون هاست برداریم و فقط از فایلها بشه استفاده کرد و قابلیت اجرا نداشته باشن (یه چیزی تو مایه های فایلهای آپلودی دیجیکالا)

      راستی اگه برات مقدوره درباره امن کردن فایلهای دیگه مطالب بزار مثلا کاربران وقتی رزومه خودشون رو به صورت doc ارسال میکنن چه مواردی رو باید مد نظر داشت ؟

    • محسن شفیعی می‌گه:

      به نظر من استفاده از MIME-TYPEها در این موارد و همچنین همونطور که خودتون گفتید جابه جایی مکان فایل آپلود شده و تغییر نام اون میتونه کافی باشه.

  • نادر می‌گه:

    سلام. نوشته اید:
    هیچ وقت از کاربران نخواهید که یک فایل فشرده را برای شما آپلود کنند. دلیل آن بسیار واضح است.
    اگه میشه دلیلش رو برام ایمیل کنید تا به دانسته هام اضافه بشه.

    • محسن شفیعی می‌گه:

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


  • نظرات این مطلب بسته است.