وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

لینک دانلود مستقیم خطای 403 می‌دهد؛ آیا Hotlink و Referer باعث آن شده‌اند؟

تشخیص اثر Referer خالی بر دانلود مستقیم، آزمایش درخواست‌ها و تنظیم محدودیت Hotlink در هاست دانلود با حفظ امنیت فایل.

انتشار:
توسط تیم فنی نت‌آرام
۶ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله لینک دانلود مستقیم خطای 403 می‌دهد؛ آیا Hotlink و Referer باعث آن شده‌اند؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
فایلی را روی هاست دانلود گذاشته‌اید. وقتی از صفحه سایت روی آن کلیک می‌کنید دانلود شروع می‌شود، اما اگر آدرس را مستقیم در مرورگر یا برنامه دانلود وارد کنید، خطای 403 Forbidden می‌گیرید. یکی از احتمال‌ها محدودیت Hotlink است: سرور برای تصمیم‌گیری از سرآیندی به نام Referer استفاده می‌کند و درخواست بدون آن یا با مقدار نامجاز را رد می‌کند.
هر ۴۰۳ از Hotlink نیست. مجوز فایل، کنترل دسترسی فایل خصوصی، محدودیت CDN یا تنظیم وب‌سرور هم ممکن است چنین پاسخی بدهند. در این آموزش دو درخواست بی‌خطر را مقایسه می‌کنیم، محل قانون را پیدا می‌کنیم و سیاست مناسب برای فایل عمومی را تنظیم می‌کنیم. برای فایل خصوصی و فروشی، احراز هویت و مجوز واقعی همچنان لازم‌اند.

Referer چیست و چرا ممکن است خالی باشد؟

وقتی مرورگر از یک صفحه به منبعی درخواست می‌فرستد، ممکن است آدرس صفحه مبدأ را در سرآیند Referer قرار دهد. نام فنی همین املای غیرمعمول را دارد. مرورگرها به دلیل سیاست حریم خصوصی، افزونه، روش بازکردن لینک یا تفاوت HTTPS و HTTP ممکن است این سرآیند را کوتاه کنند یا اصلاً نفرستند. برنامه دانلود، واردکردن مستقیم آدرس و برخی درخواست‌های خودکار هم ممکن است Referer نداشته باشند.
نکته امنیتی مهم: فرستنده درخواست می‌تواند مقدار Referer را جعل کند. پس Hotlink می‌تواند برای کاهش برخی استفاده‌های ناخواسته مرورگری مفید باشد، اما قفل مطمئن برای فایل محرمانه نیست. فایل فروشی به کنترل دسترسی معتبر، نشست یا لینک کنترل‌شده مطابق طراحی سایت نیاز دارد.

۱. از یک فایل عمومی و کوچک برای آزمایش استفاده کنید

فایل آزمایشی بدون اطلاعات خصوصی، مثلاً test.pdf، در مسیر مجاز هاست قرار دهید. در DirectAdmin بخش File Manager و مسیر ریشه همان دامنه یا زیردامنه را پیدا کنید. مطمئن شوید فایل واقعاً در همان پوشه است و نام آن با حروف بزرگ و کوچک دقیقاً مطابق لینک است.
ابتدا لینک را مستقیم در پنجره خصوصی مرورگر باز کنید و بعد از صفحه واقعی سایت روی همان لینک کلیک کنید. کد پاسخ، زمان و دامنه نهایی بعد از انتقال را یادداشت کنید. اگر هر دو ۴۰۴ هستند، اول مسیر فایل را درست کنید. اگر هر دو ۴۰۳ هستند، احتمال مجوز یا کنترل دسترسی هم مطرح است. تفاوت بین دو حالت فقط یک سرنخ است و به‌تنهایی ثابت نمی‌کند قانون Hotlink علت است.

۲. پاسخ با و بدون Referer را مقایسه کنید

در ترمینال لینوکس یا macOS، نشانی‌های نمونه را با آدرس فایل آزمایشی و صفحه واقعی خود جایگزین کنید:
کد / دستورcurl -sS -o /dev/null -w 'without referer: %{http_code}\n' https://dl.example.com/test.pdf curl -sS -o /dev/null -w 'with referer: %{http_code}\n' -e https://www.example.com/ https://dl.example.com/test.pdf
این فرمان‌ها فایل را دریافت می‌کنند اما بدنه را دور می‌ریزند؛ بنابراین از فایل کوچک آزمایشی استفاده کنید. اگر اولی ۴۰۳ و دومی ۲۰۰ داد، سیاست وابسته به Referer محتمل است. اگر نتیجه‌ها یکسان‌اند، علت می‌تواند جای دیگری باشد. این آزمایش، سایر تفاوت‌های مرورگر مانند کوکی، User-Agent و IP را حذف نمی‌کند و اثبات قطعی علت نیست.
در PowerShell ویندوز ممکن است لازم باشد curl.exe را به جای curl بنویسید. اگر پاسخ انتقال دارد، با curl -I و خط Location مقصد را ببینید؛ بعضی سرورها برای HEAD و GET رفتار متفاوت دارند. لینک حاوی توکن، کوکی یا نشانی خصوصی را در گزارش عمومی کپی نکنید.

۳. قانون را در محل واقعی تحویل فایل پیدا کنید

در پنل، بخش امنیت دامنه یا Hotlink Protection را در صورت وجود ببینید. نام و جای این گزینه بین نسخه‌های پنل و تنظیم سرویس متفاوت است. بررسی کنید دامنه اصلی و نسخه www که واقعاً از آن‌ها لینک می‌دهید در فهرست مجاز باشند و سیاست درخواست بدون Referer با نیاز فایل عمومی شما هماهنگ باشد. پس از ثبت تغییر، لینک را هم مستقیم و هم از صفحه سایت دوباره امتحان کنید.
اگر فایل از CDN یا پراکسی عبور می‌کند، قانون ممکن است آنجا اعمال شود نه در پنل هاست. کد پاسخ، سرآیندها و تنظیم همان مسیر را با مدیر سرویس بررسی کنید. در هاستی که Nginx فایل را مستقیم تحویل می‌دهد، ویرایش .htaccess الزاماً اثری ندارد. از حذف همه قوانین امنیتی سایت برای آزمایش این مورد خودداری کنید.

۴. نمونه محدود برای Apache، فقط در صورت پشتیبانی سرویس

اگر مدیر سرویس تأیید کرده Apache و mod_rewrite برای پوشه فایل‌ها فعال‌اند و تنظیم .htaccess آن پوشه مجاز است، این نمونه برای فایل‌های عمومی zip و pdf، Referer خالی یا مبدأ دامنه مشخص را می‌پذیرد و سایر Refererها را رد می‌کند:
کد / دستور<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^https?://(www\.)?example\.com(:[0-9]+)?(/|$) [NC] RewriteRule \.(zip|pdf)$ - [F,NC,L] </IfModule>
example.com را با دامنه واقعی و با رعایت escape در الگو جایگزین کنید. اگر صفحه دانلود از زیردامنه دیگری می‌آید، باید سیاست مناسب همان سایت طراحی شود؛ این نمونه همه زیردامنه‌ها را باز نمی‌کند. قبل از تغییر از فایل موجود نسخه پشتیبان داشته باشید و قانون را فقط به پوشه و فایل‌های موردنظر محدود کنید. ترتیب قوانین دیگر مهم است؛ وجود IfModule نیز اگر ماژول فعال نباشد ممکن است باعث شود قانون اصلاً اجرا نشود.
پس از ذخیره، سه حالت را با فایل عمومی کوچک امتحان کنید: Referer خالی، Referer دامنه خودتان و Referer یک دامنه آزمایشی دیگر. اگر خطای ۵۰۰ دیدید یا دسترسی درست کار نکرد، همان تغییر تازه را بازگردانید و با پشتیبانی یا مدیر وب‌سرور علت را بررسی کنید. اجازه Referer خالی یعنی لینک عمومی مستقیم نیز کار می‌کند؛ برای فایل خصوصی باید از کنترل دسترسی واقعی استفاده شود.

۵. نتیجه را مثل یک کاربر واقعی تأیید کنید

لینک نهایی را از صفحه سایت، مرورگر خصوصی و برنامه دانلود موردنظر آزمایش کنید. اگر CDN در مسیر است، پس از تغییر قانون ممکن است کش پاسخ قبلی بماند؛ نشانی آزمایشی تازه یا پاک‌سازی محدود همان فایل طبق تنظیم CDN کمک می‌کند. محتوا و اندازه فایل دریافتی را نیز با نسخه اصلی مقایسه کنید، چون پاسخ ۲۰۰ می‌تواند یک صفحه HTML باشد. راهنمای تشخیص HTML به‌جای ZIP برای این وضعیت کاربرد دارد.
برای بررسی امکانات سرویس فایل، صفحه هاست دانلود نت‌آرام را ببینید. محدودیت قابل جعل بودن Referer و احتمال خالی بودن آن در مستند رسمی Nginx و مفهوم سرآیند در مرجع موزیلا توضیح داده شده است.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام