رفع خطای آپلود فایل به دلایل امنیتی مجاز نیست در وردپرس
اگر مدیر وبسایت وردپرسی هستید و با پیام خطای آپلود فایل به دلایل امنیتی مجاز نیست مواجه میشوید، این مقاله به شما نشان میدهد که چرا این خطا رخ میدهد، چگونه میتوانید آن را به صورت امن رفع کنید و چه اقداماتی برای حفظ امنیت و پایداری سایت باید انجام بدهید. در ادامه با توضیحات دقیق، مثالهای عملی، کدهای کارآمد و نکات امنیتی مرتبط آشنا میشوید.
مفهوم خطای آپلود فایل به دلایل امنیتی مجاز نیست در وردپرس
در وردپرس هر فایلی که به وسیله ابزارهای مدیریت رسانه یا فرمها آپلود میشود از نظر نوع و پسوند بررسی میشود. این بررسی برای جلوگیری از آپلود فایلهای مخرب یا کدهای اجرایی است. پیام «Sorry, This File Type Is Not Permitted for Security Reasons» معمولاً زمانی نمایش داده میشود که فایل آپلود شده با پسوند یا mime-type غیرمجاز یا مشکوک شناسایی شود. این خطا بخشی از ساز و کار امنیتی وردپرس است تا از اجرای کدهای ناخواسته در سرور جلوگیری کند و از آسیب به دیتابیس و فضای ذخیره سایت جلوگیری نماید.
اما از دید وبمسترها و ادمینها این محدودیت میتواند مانعی واقعی برای کسب و کار دیجیتال باشد، بهویژه وقتی که نیاز به اشتراکگذاری فایلهایی مانند مستندات غیرمتنی، کتابهای بازاریابی، طراحی گرافیک یا هر نوع فایل تخصصی دارید. برای این دسته از کاربران، درک دقیق دلایل امنیتی و استفاده از روشهای امن برای رفع خطا اهمیت دوچندان دارد.
دلایل اصلی میتواند شامل موارد زیر باشد:
- فایل در فرمت یا پسوندی که وردپرس به طور پیشفرض مجاز نمیداند.
- mime-type گزارش شده توسط مرورگر یا سرور با پسوند فایل همخوانی ندارد.
- ماژولهای امنیتی سرور مانند ModSecurity یا یک فایروال اپلیکیشن وب به دلیل مخفی بودن یا وجود الگوهای خطرناک فایل را مسدود میکنند.
- افزودنیها یا تمهای سفارشی که بهطور نادرست لیست mime-types را تغییر دادهاند.
- پیکربندیهای امنیتی در فایل wp-config.php ، htaccess یا تنظیمات سرور که فرمت های خاص را بصورت پیشفرض مسدود میکند.
چه فایلهایی معمولاً مسدود میشوند و چرا؟
وردپرس بصورت پیشفرض برخی پسوندها را به دلایل امنیتی مسدود میکند. این محدودیتها برای جلوگیری از اجرای کدهای مخرب و دستاندازی به محیط کاری سرور طراحی شدهاند. با این حال بسیاری از این پسوندها در کسبوکارهای واقعی مورد استفاده قرار میگیرند.
پسوندهای مسدود یا پرخطر معمولاً عبارتاند از:
- .php، .php5، .phtml، .phps
- .exe، .dll، .bat، .sh
- .asp، .aspx، .jsp
- .cgi، .pl
- فایلهای آنسیکور (Shell script) یا فایلهای اجرایی دیگر
- برخی از فایلهای فشرده که شامل فایلهای اجرایی باشد (مثل برخی ZIP حاوی کلِی یا اسکریپت)
در مقابل پسوندهای امنتر که معمولاً مجاز هستند عبارتاند از:
- .jpg، .jpeg، .png، .gif
- .pdf، .docx، .xlsx
- .txt، .csv، .md
- .svg با توجه به سطح امنیتی و sanitization (در برخی سرورها باید با احتیاط استفاده شود)
گفتنی است که امکان بازنگری و تغییر این لیست وجود دارد اما با ریسکهای امنیتی همراه است. در این مقاله به شما نشان میدهیم چگونه با حفظ اصول امنیتی این محدودیتها را به شکل امن و بهینه رفع کنید.
روش رفع خطای آپلود فایل به دلایل امنیتی مجاز نیست در وردپرس
روشهای پیشنهادی رفع خطای آپلود فایل به دلایل امنیتی مجاز نیست در وردپرس به دو گروه اصلی تقسیم میشود که در ادامه هر دو دسته با جزئیات و مثالهای عملی آورده شده است.
1- استفاده از افزونه مدیریت mime types یا تغییرات کدنویسی
یکی از سادهترین روشها برای رفع خطا،= استفاده از افزونههایی است که امکان مدیریت لیست mime-types را به شما میدهد. این افزونهها به شما اجازه میدهند که فایلهای خاصی را به صورت امن اضافه کنید یا mime-type صحیح آنها را به وردپرس معرفی کنید. در برخی مواقع افزونههایی مانند Manage Upload Mime Types یا افزونههای مشابه میتوانند نیاز شما را رفع کنند. در عین حال اگر تمایل دارید کنترل کاملتری داشته باشید میتوانید این کار را با اضافه کردن کد در فایل functions.php قالب فرزند (child theme) انجام دهید.
نمونه کد زیر نحوه افزودن mime-type برای فایلهای SVG را نشان میدهد. توجه کنید که SVG ممکن است امنیتی باشد و باید با دقت و با استفاده از SVG sanitization ایمن شود:
function my_mime_types( $mimes ) {
// افزودن SVG با احتیاط
$mimes['svg'] = 'image/svg+xml';
// ممکن است نیاز باشد SVG را با فیلترهای دیگر امنسازی کنید
return $mimes;
}
add_filter( 'upload_mimes', 'my_mime_types' );
توضیح: استفاده از SVG نیازمند احتیاط است. برخی پروژهها برای SVG امنسازی از افزونه Safe SVG یا فرایند پاکسازی SVG استفاده میکنند تا محتوای مخرب در فایل SVG از بین برود. همچنین میتوانید mime-typeهای دیگر مانند WebP یا برخی فایلهای PDF را به لیست مجاز اضافه کنید. به هر حال همواره امنیت را در نظر بگیرید و فقط موارد ضروری را فعال کنید. اگر به افزونهها دسترسی ندارید یا ترجیح میدهید بدون نصب افزونه اقدام کنید، همین کد بالا را در فایل functions.php فرزند قالب (child theme) اضافه کنید تا پسوندهای اضافی به لیست مجازها اضافه شوند. نکته مهم این است که پس از انجام تغییرات، کش مرورگر و کش سایت را پاک کنید تا تغییرات اعمال شده به درستی دیده شوند.
2- پیکربندی و ویرایش تابع محدودکننده mime-types
گاهی اوقات خطا از این ناحیه ناشی میشود که وردپرس بهطور پیشفرض mime-typeها را از طریق هسته کنترل میکند. با افزودن فیلترهای upload_mimes و یا تغییر در فایل wp-includes/class-wp-mime-type.php هم امکانپذیر است، اما این کار به دلیل بهروزرسانیهای هسته معمولاً توصیه نمیشود زیرا با بروزرسانی وردپرس ممکن است دوباره به حالت اولیه برگردد. به همین دلیل بهتر است از طریق افزونه یا قالب فرزند اقدام کنید تا پیکربندی پایدارتر باشد.
در برخی موارد ممکن است فایلهای شما با mime-type اشتباه ثبت شده باشند. در این حالت بهجای تغییر لیست mime-types میتوانید با اضافه کردن شرطهایی در تابعی مانند راستیآزمایی mime-type به صورت موقتی به صورت دقیق به مشکلات خاص رسیدگی کنید. در ادامه یک مجموعه کد چند بخشی به همراه توضیحات ارائه میشود که میتواند به صورت امن برای افزودن mime-types جدید به وردپرس استفاده شود. این کدها باید در پرونده functions.php قالب فرزند (Child Theme) یا در یک پلاگین شخصی قرار گیرند تا در بروزرسانیهای هسته وردپرس دچار مشکل نشوند.
افزودن امکان آپلود فرمت های مشخصی مانند SVG، WEBP و JSON در وردپرس:
function custom_add_mime_types($mimes) {
// SVG
$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml';
// WebP
$mimes['webp'] = 'image/webp';
// JSON
$mimes['json'] = 'application/json';
return $mimes;
}
add_filter('upload_mimes', 'custom_add_mime_types');
رفع خطای امنیتی آپلود SVG در وردپرس
در برخی نسخههای وردپرس حتی با افزودن mime-type، آپلود SVG ممکن است با خطای Sorry, this file type is not permitted for security reasons مواجه شود. برای رفع این مشکل میتوانید از کد زیر استفاده کنید:
function fix_svg_mime_type($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if ($filetype['ext'] === 'svg') {
$data['ext'] = 'svg';
$data['type'] = 'image/svg+xml';
}
return $data;
}
add_filter('wp_check_filetype_and_ext', 'fix_svg_mime_type', 10, 4);
3- پیکربندی سرور و ModSecurity برای رفع خطا
در برخی خدمات میزبانی ماژول امنیتی ModSecurity یا فایروال اپلیکیشن وب (WAF) مانع آپلود فایلهای معینی میشود. در این مواقع دو مسیر اصلی وجود دارد:
- تماس با میزبان وب برای بررسی قوانین ModSecurity و درخواست رفع محدودیت برای دامنه شما با استناد به سیاستهای امنیتی شرکت میزبانی.
- ایجاد استثناهای امن برای مسیر آپلود و یا برای کدهای خاص که مشکلساز هستند. به عنوان مثال به صورت دقیق به مسیرهای wp-content/uploads اجازه بدهید تا فایلهای امن با پسوندهای مجاز آپلود شوند، در حالی که فایلهای خطرناک همچنان مسدود بمانند.
اطمینان حاصل کنید که هر گونه تغییر در ModSecurity یا قوانین فایروال با مشورت تیم امنیتی یا میزبان انجام شود تا از ایجاد باگها یا خطرات جدید جلوگیری شود. همچنین اگر سرور شما با سرویسهایی مانند CF CDN یا Cloudflare استفاده میکند، ممکن است قوانینی مرتبط با آپلودها در سطح CDN نیز وجود داشته باشد که باید بررسی شوند.
4- استفاده از FTP یا ابزارهای مدیریتی برای آپلود غیرمجاز
روش دیگری که بعضاً برای کارهایی مانند آپلود فایلهایی با پسوند غیرمعمول استفاده میشود، استفاده از FTP یا SSH برای انتقال فایلها به پوشه آپلود است. سپس با استفاده از ابزارهای مدیریت فایل در محیط وردپرس، فایلها را از پوشه مجاز به رسانه سایت منتقل کنید. این روش به عنوان یک راهکار موقت در نظر گرفته میشود و به هیچ وجه جایگزین مدیریت mime-types در وردپرس نیست. توجه کنید که فایلهای آپلود شونده باید از نظر امنیتی بررسی شوند تا هر گونه اسکریپت مخرب یا کد اجرایی درون فایل وجود نداشته باشد.
5- تبدیل یا تبدیل فایل به فرمت امن قبل از آپلود
اگر نیاز دارید یک فایل خاص را در وبسایت خود به نمایش بگذارید اما وردپرس آن را قبول نمیکند، میتوانید فایل را به فرمت امنتر تبدیل کنید. برای مثال:
- فایلهای قابل ویرایش مانند ورد یا اکسل را به PDF تبدیل کنید تا در وردپرس قابل نمایش باشند.
- تصاویر با وضوح بالا را به فرمتهای رایج و فشرده مانند JPEG یا WEBP تبدیل کنید تا کاربران بتوانند سریعتر دانلود کنند.
- فایلهای SVG را فقط در صورتی آپلود کنید که فرایند sanitization به درستی انجام شده باشد و منابع معتبر برای امنیت وجود داشته باشد.
توجه به این نکته مهم است که تبدیل فرمت باید با حفظ کیفیت و استفاده از ابزارهای معتبر انجام شود تا کاربر تجربه خوبی از دانلود یا مشاهده فایلها داشته باشد. همچنین در هر حالت مسیر دسترسی به فایلهای تبدیل شده باید به شکلی امن مدیریت شود تا از دسترسی غیرمجاز به وکتورهای SVG یا سایر پروندههای با سطح دسترسی بالا جلوگیری شود.
اقدامات مهم پس از رفع خطای آپلود فایل در وردپرس
رفع خطا فقط یک گام ابتدایی است. پس از انجام تغییرات باید به موضوع امنیتی به صورت جامع نگاه کرد تا از حملات احتمالی جلوگیری شود. در این بخش به برخی از اقدامات مهم اشاره میکنیم که به حفظ امنیت سایت کمک میکند.
- پیادهسازی محدودیتهای دانلود و دسترسی: برای هر فایل آپلود شده، دسترسیها را محدود به کاربران مجاز نمایید و از نمایش یا دانلود فایلها از طریق مسیرهای عمومی خودداری کنید مگر اینکه ضروری باشد.
- استفاده از فشردهسازی امن فایلها: به عنوان مثال برای فایلهایی که نیاز به فشردهسازی دارند از فرمتهای امن و معتبر استفاده کنید و ابزارهای معتبر برای استخراج فایلها را به کار ببرید.
- فعال سازی کنترل ورودی کاربران: برای فرمهای آپلود از اعتبارسنجی ورودی (sanitization) و فیلترینگ مناسب استفاده کنید تا از وارد شدن دادههای مخرب جلوگیری شود.
- بروزرسانی منظم افزونهها و هسته وردپرس: بروزرسانیهای امنیتی را به صورت منظم پیگیری کنید تا از آسیبپذیریهای شناختهشده جلوگیری شود.
- فعالسازی لاگها و نظارت بر فعالیتها: ثبت لاگ های آپلود و دسترسیها به صورت مداوم و بررسی آنها در بازههای زمانی مشخص به شناسایی رفتارهای مشکوک کمک میکند.
جدول مقایسه پسوندها و mime-types با وضعیت امنیتی
| پسوند | Mime Type معمول | وضعیت امنیتی | توصیه |
| php | application/x-httpd-php | خطرناک، معمولاً مسدود | اجتناب یا استفاده در مسیر امن با sanitization |
| exe | application/octet-stream | خطرناک، معمولاً مسدود | دیده نشود یا با کانال امن و مناسب |
| js | application/javascript | خطرناک، مسدود یا محدود | اجتناب یا اجرای محدود در محیط معتبر |
| svg | image/svg+xml | معمولاً امن است با sanitization | استفاده در محیط امن و با فیلترسیکه |
| application/pdf | امن و رایج | مورد استفاده عادی |
نتیجه گیری
در این مقاله به صورت جامع به موضوع رفع خطای آپلود فایل به دلایل امنیتی مجاز نیست در وردپرس پرداختیم. توضیح دادیم چرا این خطا رخ میدهد و چه راهکارهایی برای رفع آن وجود دارد تا هم قابلیت استفاده از فایلها را حفظ کنید و هم امنیت سایت را تقویت کنید. اگر مایل هستید که این فرایند به صورت دقیقتر، امنتر و با رعایت بالاترین استانداردهای سئو انجام شود، تیم ما آماده است تا به شما خدمات تخصصی ارائه دهد.
با ما تماس بگیرید تا وضعیت سایت شما بررسی شود، منابعی که برای ارتقای امنیت و قابلیت استفاده در وردپرس نیاز دارید را شناسایی کنیم و یک نقشه عملی برای رفع خطاهای آپلود ارائه دهیم. ما در کنار شما هستیم تا رفع مشکلات وردپرس شما با رویکردی اصولی و مبتنی بر تجربه و تخصص سرعت بگیرد و اعتماد کاربران شما افزایش یابد. با رعایت نکات گفتهشده، میتوانید نه تنها از تکرار خطا جلوگیری کنید بلکه تجربه کاربری بهتری برای بازدیدکنندگان سایت فراهم نمایید.