خیلی از مواقع پیش میاد که ما توی وب سایتی که توسعه میدیم نیازمند ارسال فایل بواسطه کاربر هستیم. مثل مواقعی که نیاز داریم کاربر عکس پروفایل یا رزومهاش را ارسال کنه. اگرچه پروسه ارسال فایل کلاً موضوع پیچیدهای نیست اما یکسری مسائل امنیتی هست که حتماً باید رعایت بشه.
۱ – یکی از مواردی که اهمیت داره این هست که فایل را با نام اصلیش ذخیره نکنیم و اگه در آینده نیاز به بازیابی فایل با همون نام اصلیش هست فقط کافیه در زمان ذخیره فایل نامش را توی پایگاه داده نگهداری کنیم. نام فایل جدید میتونه یک MD5 HASH یا حتی شماره رکورد با اندکی تغییرات منطقی باشه.
۲ – بهتره فایل را خارج از Document Root ذخیره کنیم. در این صورت هیچکس امکان دسترسی از طریق وب به مسیر ذخیره شده را نداره.
۳ – حتماً توی برنامتون برای فایلها محدودیت حجم بگذارین ، قطعاً وقتی یک عکس پروفایل در فرمت JPG و سایز ۱۲۰×۱۰۰ در DPI ۷۲ مورد نیاز هست در نتیجه حجم ارسالی نباید مثلاً از ۱۰۰ کیلوبایت بیشتر بشه.
۴ – علاوه بر محدودیت حجم حتماً محدودیت تعداد فایل در یک Request را از طریق max_file_uploads اعمال کنید تا از حملات DOS در امان باشین.
۵ – توجه داشته باشین که پسوند فایلها نشون دهنده این نیستند که فایل واقعاً کارایی مرتبط با پسوندش را داره. یک فایل ممکنه با پسوند jpg ارسال بشه ولی واقعاً یک فایل عکس نباشه و سمت سرور یا کلاینت بتونه مشکلات امنیتی به وجود بیاره. شما حتما باید با استفاده از ابزار و توابع موجود بررسی عمیقتر از پسوند فایل انجام بدین. مثلاً در مورد فایلهای عکس میتونین با استفاده از تابع getimagesize اطلاعات بیشتری را نسبت به فایل بدست بیارین و کاملاً مطمئن بشین اون فایل یک عکسه.
۶ – متأسفانه با وجود بررسی پسوند و Header و استفاده از ابزار شناسایی دیگه باز هم امکان داره فایل مورد نظر آلوده به Bug ها و Exploit های فایلهای مختلف از جمله همون عکسها باشه.در این رابطه بهترین کار این هست که از طریق یک نرمافزار Malware Scan بررسی های بیشتری انجام بدیم. این کار را میشه با ارسال فایل (با استفاده از CURL) به سایتهای Malware Scan آنلاین مثل virustotal.com انجام داد ، خودتون هم میتونید میزبانی اختصاصی بگیرین و نرمافزار مورد نظرتون را نصب کنید و از طریق ابزار اون فایلها را بررسی کنید.
۷ – پس از Upload فایل روی سرور حتماً سطح دسترسی به فایل را کنترل کنید. البته مدیر سیستم عموما موارد امنیتی را انجام داده و مانع از دسترسی های غیر ضروری مثل اجرایی بودن شده اما شما هم میتونید این دسترسی ها را کنترل کنید. این کنترل هم میتونه روی خود فایل باشه یا روی پوشه ای که فایل در اون ذخیره میشه.
امیدوارم با رعایت موارد بالا امنیت بخش ارسال فایل سایت شما بهبود پیدا کنه.
با استفاده از fileinfo به راحتی میشه فایل هارو از رو هدرش تشخیص داد که چه نوع فایل هست
عالی.