Loading...

امنیت · مطالعه 6 دقیقه‌ای

محافظت هات‌لینک: نگذارید سایت‌های دیگر پهنای باند شما را مصرف کنند

هات‌لینک یعنی سایت دیگری تصاویر یا فایل‌های شما را با URL در صفحات خودش جاسازی کند، طوری که بازدیدکنندگانش فایل را از سرورهای شما دانلود کنند — پهنای باند را شما می‌پردازید، محتوا را آن‌ها می‌گیرند. یک تاپیک پرطرفدار در یک فروم که عکس محصول شما را embed کرده، می‌تواند بی‌صدا به سهم قابل‌توجهی از صورت‌حساب ترافیک شما تبدیل شود. محافظت هات‌لینک یک کنترل کوچک و هدفمند است: بررسی کن چه کسی درخواست می‌دهد، به صفحات خودت و شرکای مجاز سرو کن، بقیه را رد کن. این راهنما توضیح می‌دهد این سازوکار چگونه کار می‌کند، محدودیت‌های واقعی‌اش کجاست و چگونه آن را فعال کنید بدون آنکه چیزهایی که باید کار کنند، بشکنند.

Updated

محافظت هات‌لینک: نگذارید سایت‌های دیگر پهنای باند شما را مصرف کنند

هات‌لینک چیست و چه هزینه‌ای دارد

هر تصویر سایت شما یک URL دارد و هیچ چیز در HTML مانع نمی‌شود که سایت دیگری همان URL را در تگ img خودش بگذارد. وقتی این کار را می‌کند، هر بازدیدکننده‌ی صفحه‌ی او فایل را از زیرساخت شما دانلود می‌کند: تجربه‌ی محتوایی برای آن‌ها، پهنای باند و صورت‌حساب CDN برای شما. همین قاعده برای PDFها، فونت‌ها و فایل‌های ویدیویی هم صادق است — هر چیزی که آدرس‌پذیر باشد.

آنچه این پدیده را موذی می‌کند، الگوی هزینه‌اش است. یک embed هزینه‌ی محسوسی ندارد؛ اما یک پست پربازدید در فروم، یک صفحه‌ی وایرال در سایت‌های تجمیع‌گر یا یک سایت اسکرپرساخته که صدها تصویر شما را جاسازی کرده، خودش را اعلام نمی‌کند — فقط به‌شکل ترافیکی ظاهر می‌شود که با صفحات خودتان جور درنمی‌آید. اگر آمار شما درخواست‌های رسانه‌ای قابل‌توجهی با referrerهای خارجی نشان می‌دهد، دارید سایت شخص دیگری را تأمین مالی می‌کنید.

محافظت مبتنی بر Referer چگونه کار می‌کند

مرورگرها به زیر-درخواست‌ها یک هدر Referer الصاق می‌کنند: وقتی صفحه‌ای تصویری را بارگذاری می‌کند، درخواست آدرس همان صفحه را با خود حمل می‌کند. محافظت هات‌لینک این هدر را در لبه (edge) می‌خواند و یک سیاست ساده اعمال می‌کند — اگر صفحه‌ی درخواست‌کننده به دامنه‌های خودتان (یا شرکایی که مجاز کرده‌اید) تعلق دارد، سرو کن؛ اگر به جای دیگری تعلق دارد، رد کن.

این ردکردن در لبه اتفاق می‌افتد، پیش از آنکه origin شما چیزی ببیند، بنابراین پهنای باندِ ربوده‌شده فوراً قطع می‌شود. بعضی سایت‌ها به‌جای بلاک صریح، یک placeholder کوچک «تصویر میزبانی‌شده توسط…» سرو می‌کنند که سرقت را به تبلیغ رایگان تبدیل می‌کند — ترفند قشنگی است، اما ردکردنِ ساده استاندارد و پیش‌فرضِ ساده‌تر است.

محدودیت‌های واقعی: این سازوکار از چه چیزی محافظت نمی‌کند

Referer را کلاینت تأمین می‌کند. یک اسکریپت می‌تواند آن را جعل کند، یک افزونه‌ی حریم خصوصی می‌تواند حذفش کند، و بعضی بسترهای کاملاً مشروع اصلاً آن را نمی‌فرستند. پس درباره‌ی چیستی محافظت هات‌لینک دقیق باشید: یک کنترل هزینه است که رایج‌ترین حالت — embed کردنِ سرسری توسط سایت‌های دیگر — را متوقف می‌کند، نه یک سازوکار کنترل دسترسی.

دو نتیجه از این حرف درمی‌آید. اول، تکلیف refererهای خالی را مشخص کنید: اگر بلاک‌شان کنید، بازدیدکنندگان پشت ابزارهای سخت‌گیر حریم خصوصی، بازکردن مستقیم لینک و بعضی فیدخوان‌ها را می‌شکنید؛ اگر مجازشان کنید، یک اسکرپر مصمم می‌تواند با نفرستادن Referer از این شکاف رد شود. بیشتر سایت‌ها حالت خالی را مجاز می‌کنند و این شکاف را می‌پذیرند. دوم، هر چیزی که باید واقعاً خصوصی بماند — دانلودهای پولی، اسناد کاربران — به احراز هویت واقعی یا URLهای امضاشده‌ی منقضی‌شونده نیاز دارد؛ که قابلیت دیگری است و مسئله‌ی دیگری را حل می‌کند.

فعال‌سازی بدون شکستن استفاده‌های مشروع

محافظت هات‌لینک: نگذارید سایت‌های دیگر پهنای باند شما را مصرف کنند — فعال‌سازی بدون شکستن استفاده‌های مشروع
security در سطح قاعده: قواعد IP، rate limiting و حفاظت hotlink.

حالت شکست محافظت هات‌لینک، بلاک‌کردن بیش از حد است: تصاویر خبرنامه‌تان در کلاینت‌های ایمیل، صفحات‌تان در اپ‌های «بعداً بخوان»، سایت شریکی که واقعاً می‌خواهید شما را embed کند. پس دامنه‌اش را آگاهانه تعیین کنید.

در cdn.com.tr این کنترل روی خودِ قانون تحویل قرار دارد: یک whitelist یا blacklist هات‌لینک به‌ازای هر قانون، که در پنل کنار تنظیمات کش و امنیت همان قانون مدیریت می‌شود. همین جایگذاری اصل ماجراست — آن را روی قانونی که مسیرهای رسانه‌ای‌تان را پوشش می‌دهد اعمال کنید، دامنه‌های خودتان را فهرست کنید (از جمله www و هر ساب‌دامینی که به‌طور مشروع embed می‌کند)، شرکا را در صورت نیاز اضافه کنید، و به قانون HTMLتان دست نزنید. سپس پیش از آنکه کار را تمام‌شده بدانید، هر سه حالت را تست کنید: صفحه‌ی خودتان همچنان تصاویرش را رندر می‌کند، referer خارجی رد می‌شود، و بازکردن مستقیم در تب جدید همان رفتاری را دارد که برای refererهای خالی انتخاب کرده‌اید.

هر سه حالت را با curl بررسی کنید

# your own page as referer — must serve
curl -s -o /dev/null -w '%{http_code}\n' -e 'https://www.example.com/page' https://cdn.example.com/img/product.jpg

# foreign referer — must be refused
curl -s -o /dev/null -w '%{http_code}\n' -e 'https://other-site.com/thread' https://cdn.example.com/img/product.jpg

# no referer — whichever you chose, verify it is deliberate
curl -s -o /dev/null -w '%{http_code}\n' https://cdn.example.com/img/product.jpg

پرسش‌های پرتکرار

آیا محافظت هات‌لینک Google Images را می‌شکند؟

می‌تواند، اگر refererهای خالی و موتورهای جستجو را بلاک کنید — و حضور در جستجوی تصاویر معمولاً ترافیکی است که می‌خواهید. refererهای موتورهای جستجو (و معمولاً حالت خالی) را مجاز کنید، مگر دلیل مشخصی برای خلافش داشته باشید.

آیا جلوی دانلود و آپلود دوباره‌ی تصاویرم را می‌گیرد؟

نه. محافظت هات‌لینک مانع می‌شود زیرساختِ شما به مخاطبان آن‌ها سرویس بدهد؛ جلوی کپی‌کردن را نمی‌گیرد. محافظت در برابر کپی یک مسئله‌ی حقوقی و واترمارک است، نه مسئله‌ی پهنای باند.

همه‌چیز را محافظت کنم یا فقط رسانه‌ها را؟

فقط رسانه‌ها را، از طریق قانونی که آن مسیرها را پوشش می‌دهد. محافظت از HTML بی‌معناست (صفحات همان چیزی‌اند که می‌خواهید بازدید شوند)، و دامنه‌بندی به‌ازای هر قانون دقیقاً همان چیزی است که نمی‌گذارد این کنترل مرور عادی را بشکند.

تکلیف فایل‌های پولی یا خصوصی چیست؟

این قابلیت برای آن‌ها نیست. بررسی Referer فقط embed کردنِ سرسری را دفع می‌کند؛ برای محتوایی که ارزش واقعی دارد از احراز هویت یا URLهای امضاشده‌ی منقضی‌شونده استفاده کنید تا صرفِ داشتن لینک کافی نباشد.