CodeShot

HSTS (HTTP Strict Transport Security) در مقابل ریدایرکت ۳۰۱ به HTTPS

ریدایرکت ۳۰۱ روشی است که سرور درخواست HTTP اولیه را می‌گیرد و کاربر را به نسخه HTTPS هدایت می‌کند، اما همان درخواست اول هنوز رمزنگاری‌نشده و در معرض حمله Man-in-the-Middle است؛ HSTS یک هدر است که به مرورگر می‌گوید برای مدت مشخصی حتی درخواست‌های بعدی را هم مستقیماً و بدون تلاش اولیه HTTP به HTTPS بفرستد.

ویژگیHSTS (HTTP Strict Transport Security)ریدایرکت ۳۰۱ به HTTPS
محافظت از درخواست اولداردندارد
محل اعمالهدر پاسخ سرورتنظیمات ریدایرکت سرور
نیاز به یکدیگرمکمل ریدایرکت استبه‌تنهایی کافی نیست

کِی از HSTS (HTTP Strict Transport Security) استفاده کنیم؟

وقتی فقط می‌خواهید اطمینان حاصل کنید کاربرانی که با HTTP وارد می‌شوند به نسخه امن سایت هدایت شوند، به‌عنوان یک لایه پایه.

کِی از ریدایرکت ۳۰۱ به HTTPS استفاده کنیم؟

وقتی می‌خواهید حتی احتمال ضعیف حمله در همان یک درخواست اول HTTP را هم حذف کنید و مرورگر را مجبور کنید همیشه مستقیم HTTPS درخواست بزند.

مثال HSTS (HTTP Strict Transport Security)

server {
    listen 80;
    return 301 https://$host$request_uri;
}

مثال ریدایرکت ۳۰۱ به HTTPS

add_header Strict-Transport-Security
  "max-age=31536000; includeSubDomains" always;

اشتباه رایج

اشتباه رایج این تصور است که فقط ریدایرکت ۳۰۱ کافی است؛ اما همان درخواست اول HTTP قبل از ریدایرکت شدن، در شبکه‌های ناامن (مثل Wi-Fi عمومی) قابل شنود یا دستکاری است، و HSTS دقیقاً همین شکاف را می‌بندد.

جمع‌بندی

ریدایرکت ۳۰۱ حداقل لازم برای هدایت کاربران به HTTPS است، اما برای امنیت کامل باید همیشه HSTS را هم فعال کنید تا حتی درخواست اول هم امن باشد.