لینک امن چیست و چرا به آن نیاز داریم؟

تصور کنید محتوای ارزشمندی مانند ویدیوهای آموزشی، فایل‌های دانلودی ویژه یا اسناد محرمانه دارید. اگر لینک دسترسی به این محتوا ساده و دائمی باشد، هر کسی با داشتن لینک می‌تواند آن را به اشتراک بگذارد (Hotlinking) و افراد غیرمجاز به سادگی به آن دسترسی پیدا کنند.

لینک امن (Secure Link) راه حل این مشکل است. این ویژگی به شما اجازه می‌دهد لینک‌هایی تولید کنید که مانند یک «بلیت یک‌بار مصرف» یا «کارت ورود زمان‌دار» عمل می‌کنند. این لینک‌ها دارای دو ویژگی کلیدی هستند:

  1. امضای دیجیتال (Token): هر لینک دارای یک امضای منحصر به فرد است که ثابت می‌کند توسط شما و برای یک کاربرد خاص صادر شده است.

  2. تاریخ انقضا (Expire): هر لینک فقط برای مدت زمان معینی اعتبار دارد و پس از آن به طور خودکار از کار می‌افتد.

وقتی کاربری با یک لینک امن درخواست ارسال می‌کند، سرورهای CDN ستون ابتدا امضا و تاریخ انقضای آن را بررسی می‌کنند. اگر هر دو معتبر باشند، محتوا تحویل داده می‌شود؛ در غیر این صورت، دسترسی با خطای 403 Forbidden مسدود خواهد شد.


چگونه لینک امن را پیاده‌سازی کنیم؟ (گام به گام)

فرآیند پیاده‌سازی دو بخش اصلی دارد: ابتدا تنظیمات اولیه را در پنل CDN انجام می‌دهید و سپس لینک‌ها را در اپلیکیشن خود تولید می‌کنید.

گام اول: دریافت کلید مخفی (Secret) از پنل CDN

کلید مخفی یا secret، یک رشته متنی محرمانه است که شما و CDN ستون هر دو از آن اطلاع دارید و اساس تولید امضای دیجیتال است.

  1. وارد پنل کاربری ستون و بخش تنظیمات CDN خود شوید.

  2. به قسمت «لینک امن» بروید.

  3. اگر کلید مخفی ندارید، روی «ساختن secret» کلیک کنید. یک کلید جدید برای شما تولید می‌شود. این کلید را کپی کرده و در یک جای امن در تنظیمات اپلیکیشن خود ذخیره کنید.

نکته حرفه‌ای: شما می‌توانید تا ۵ کلید مخفی فعال داشته باشید. این قابلیت به شما اجازه می‌دهد کلیدهای خود را بدون ایجاد اختلال در سرویس (Downtime) تغییر دهید. به این صورت که کلید جدید را اضافه کرده، اپلیکیشن خود را برای استفاده از آن به‌روز می‌کنید و پس از اطمینان، کلید قدیمی را حذف می‌نمایید.

گام دوم: تولید لینک امن در اپلیکیشن شما

اکنون که کلید مخفی را دارید، باید کدی بنویسید که برای هر کاربر و هر فایل، یک لینک امن منحصر به فرد تولید کند. برای این کار به سه جزء نیاز دارید:

  1. مسیر فایل (Path): مسیر کامل فایل مورد نظر در URL (بدون نام دامنه). مثال: /videos/premium/episode-1.mp4

  2. زمان انقضا (Expire): یک عدد که مشخص می‌کند لینک تا چه زمانی معتبر است. این عدد باید در فرمت Unix Timestamp (تعداد ثانیه‌های گذشته از ابتدای سال ۱۹۷۰) باشد.

  3. کلید مخفی (Secret): همان کلیدی که از پنل CDN دریافت کردید.

دستورالعمل ساخت توکن (Token):

توکن یا امضای دیجیتال شما از فرمول ساده زیر به دست می‌آید:

token = MD5( path + secret + expire )

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

ساختار نهایی لینک امن:

لینک نهایی که باید به کاربر تحویل دهید، به این شکل خواهد بود:

https://[Your-CDN-Domain][Path]?expire=[Timestamp]&token=[Generated-Token]

نمونه کد کاربردی (Python)

کد زیر به وضوح نشان می‌دهد که چگونه می‌توانید یک لینک امن تولید کنید:

from hashlib import md5
from time import time
 
# ۱. مقادیر اولیه را تعریف کنید
secret = 'your_secret_key_from_cdn_panel'  # کلید مخفی که از پنل دریافت کردید
path = "/path/to/file1.jpg"                # مسیر فایل مورد نظر
 
# ۲. زمان انقضا را مشخص کنید (مثلاً ۳ دقیقه یا ۱۸۰ ثانیه دیگر)
# int(time()) زمان فعلی را به صورت Unix Timestamp برمی‌گرداند
expire = int(time()) + 180
 
# ۳. رشته مورد نظر برای هش کردن را بسازید (Path + Secret + Expire)
string_to_hash = f"{path}{secret}{expire}"
 
# ۴. توکن را با استفاده از الگوریتم MD5 تولید کنید
token = md5(string_to_hash.encode('utf-8')).hexdigest()
 
# ۵. لینک نهایی و امن را بسازید
secured_url = f"https://cdn.yourdomain.com{path}?expire={expire}&token={token}"
 
# ۶. لینک را برای استفاده چاپ کنید
print(secured_url)

قابلیت‌های پیشرفته

  • شخصی‌سازی نام پارامترها: اگر نام‌های token و expire با پارامترهای دیگر در اپلیکیشن شما تداخل دارند، می‌توانید از بخش تنظیمات لینک امن در پنل CDN، نام‌های دلخواه خود را برای آن‌ها انتخاب کنید.

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