Defaults.Exposed › رفع اشکالها › HSTS (Strict-Transport-Security)
چطور HSTS (Strict-Transport-Security) را رفع کنید
HSTS یک دستورالعمل یکخطی است که وبسایت شما به هر مرورگر میدهد: 'همیشه از طریق اتصال امن و رمزگذاری شده پیش من برگرد — هرگز از طریق ناامن.' بدون آن، قفل شما میتواند روی WiFi مشترک بهآرامی کنده شود، و اولین بازدید به سایت شما در معرض خطر است.
نتیجه نهایی برای کسبوکار شما: داشتن HTTPS (قفل) با اجرای آن یکی نیست. بدون HSTS، یک مهاجم در همان WiFi با مشتری شما میتواند بهآرامی اتصال را به HTTP ساده و رمزگذاری نشده پایین بیاورد — ورودها، اطلاعات کارت و دادههای فرم را ضبط کند در حالی که مشتری هیچ مشکلی نمیبیند. گواهینامه SSL، که ممکن است برایش پول دهید، دور زده میشود. اصلاح رایگان است و حدود ۱۵ دقیقه برای هر کسی که سایت شما را اجرا میکند طول میکشد.
هزینه این برای شما
- مشتریان روی WiFi کافه، هتل، فرودگاه یا کنفرانس میتوانند اتصال آنها به سایت شما بهآرامی downgrade شود و دادههایشان خوانده شود — بدون هیچ هشداری روی صفحهی آنها.
- برای HTTPS پول دادید و قفل دارید، اما بدون HSTS مهاجمان میتوانند به سادگی دورش بزنند؛ گواهینامه حس امنیت کاذب میدهد.
- اولین بازدید به سایت شما (قبل از هر تغییر مسیر به HTTPS) نقطهی ضعفی است که مهاجمان هدف قرار میدهند — HSTS آن را برای هر بازدید بعدی میبندد.
- پرسشنامهی امنیتی، فرم بیمهی سایبری یا چکلیست خریدار سازمانی 'بدون HSTS' را علامتگذاری میکند و معامله را متوقف میکند تا رفع شود.
- مقدار را اشتباه تنظیم کنید (خیلی کوتاه) و بدترین هر دو دنیا را دارید: به نظر پیکربندی شده است اما تقریباً هیچ محافظت واقعی ارائه نمیدهد.
چرا اهمیت دارد. HTTPS یک اتصال را هنگامی که رمزگذاری شده است محافظت میکند — اما مرورگرها را مجبور نمیکند از آن استفاده کنند. مهاجمان از آن شکاف با 'SSL stripping' سوءاستفاده میکنند: در هر شبکهی مشترک بهآرامی بازدیدکننده را روی HTTP ناامن نگه میدارند و همه چیز را میخوانند. HSTS به مرورگر میگوید از HTTP ساده برای دامنهی شما کاملاً امتناع کند، برای مدت طولانی، پس شکاف بعد از اولین بازدید بسته میشود. یک header پاسخ تنها است، رایگان برای اضافه کردن، و در نمرهگذاری ما ارزش امتیاز واقعی دارد.
این چیست، به زبان ساده
تقریباً مطمئناً HTTPS دارید — قفل کوچک در نوار مرورگر. خوب. اما اینجا بخشی است که تقریباً به هیچکس گفته نمیشود: داشتن HTTPS با اجرای آن یکی نیست.
HTTPS یک اتصال را یک بار مرورگر تصمیم میگیرد از آن استفاده کند رمزگذاری میکند. HSTS — مخفف HTTP Strict Transport Security — دستورالعملی است که مرورگر را مجبور میکند همیشه از آن استفاده کند:
«از این پس، برای دامنهی من، فقط از طریق اتصال امن با من صحبت کن. هرگز ناامن نه. حتی سعی هم نکن.»
مرورگر آن را به اندازهای که میگویید به یاد میآورد و اطاعت میکند — معمولاً یک سال. بعد از اولین بازدید امن بازدیدکننده، مرورگر آنها به سادگی از بارگذاری سایت شما از طریق HTTP ساده و رمزگذاری نشده امتناع میکند، حتی اگر چیزی سعی کند آن را مجبور کند.
بدون HSTS، آن قانون «همیشه از نسخهی امن استفاده کن» وجود ندارد — و مهاجمان دقیقاً میدانند چگونه از شکاف بهرهبرداری کنند.
این چقدر ممکن است برای شما هزینه داشته باشد
-
خروج از فروشگاه کافه. یک مشتری فروشگاه شما را روی WiFi کافه باز میکند. یک مهاجم در همان شبکه یک ابزار آزادانه در دسترس اجرا میکند که مشتری را روی HTTP ساده به جای HTTPS نگه میدارد. مشتری آنچه را که مثل سایت عادی شما به نظر میرسد میبیند — بدون هشدار — و اطلاعات کارت خود را تایپ میکند.
-
کارمند در حال سفر. یک کارمند از یک هتل یا فرودگاه وارد پانل ادمین یا ایمیل شما میشود. همان ترفند downgrade نام کاربری و رمز عبور آنها را ضبط میکند.
-
معاملهای که متوقف میشود. یک مشتری بزرگتر پرسشنامهی امنیتی استاندارد خود را قبل از امضا میفرستد. یک خط میپرسد: «آیا وبسایت شما HTTPS را از طریق HSTS اجرا میکند؟» پاسخ «نه» است.
-
بررسی بیمهی سایبری یا انطباق. اسکن یک بیمهگر، یا حسابرسی بررسی وضعیت حفاظت از داده، header گمشده را علامتگذاری میکند. رمزگذاری دادههای شخصی یک انتظار صریح تحت قوانین حفاظت از داده (ماده ۳۲ GDPR) است.
-
حس امنیت کاذب. برای SSL پول میدهید، قفل نشان میدهد، و همه فرض میکنند سایت امن است. تا زمانی که یک مشتری روی شبکهی مشترک است.
در واقع چیست
وقتی مرورگر صفحهای از وبسایت شما را درخواست میکند، سرور شما صفحه را به علاوه «header» های نامرئی برمیگرداند. HSTS یکی از آن header هاست:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
سه بخش مهم هستند:
max-age— چقدر (بر حسب ثانیه) مرورگر باید HTTPS را اجباری به یاد بیاورد.31536000یک سال است.includeSubDomains— قانون را به هر زیردامنه گسترش دهید (shop.،app.،mail.و غیره).preload— دامنهی شما را در یک لیست اصلی تعبیه شده در مرورگرها ثبت کنید.
«خوب» چه شکلی است — و چگونه نمره داده میشود
| مقدار max-age | معنی | نتیجه |
|---|---|---|
| ۱ سال یا بیشتر (≥ 31536000) | عالی — تنظیم توصیه شده | نمرهی کامل |
| ۶ ماه یا بیشتر (≥ 15768000) | خوب، اما نه سال کامل | جزئی |
| ۱ روز یا بیشتر (≥ 86400) | ضعیف — خیلی کوتاه | کم / جزئی |
| زیر ۱ روز، یا بدون header | عملاً بدون محافظت | شکست (شدت بالا) |
چگونه آن را رفع کنیم (رایگان، ~۱۵ دقیقه)
این بخش را به هر کسی که وبسایت شما را اجرا میکند بدهید. اصلاح رایگان است.
یک قانون ترتیب مهم اول: HSTS چسبنده است. پس تأیید کنید HTTPS قبل از روشن کردن آن به طور گسترده روی سایت اصلی و هر زیردامنه به درستی کار میکند. مسیر ایمن: با مقدار کوتاه آزمایش کنید → تأیید کنید چیزی نمیشکند → به یک سال بالا ببرید.
مرحله ۱ — مطمئن شوید HTTPS همه جا از قبل کار میکند
سایت و زیردامنههای اصلی را از طریق https:// باز کنید و تأیید کنید با گواهینامهی معتبر به درستی بارگذاری میشوند.
مرحله ۲ — header را اضافه کنید (پلتفرم خود را انتخاب کنید)
Cloudflare (یا CDN مشابه): به SSL/TLS → Edge Certificates → HTTP Strict Transport Security (HSTS) بروید و آن را فعال کنید.
Nginx: داخل block HTTPS server خود اضافه کنید:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
Apache: اطمینان حاصل کنید mod_headers فعال است، سپس به virtual host HTTPS خود اضافه کنید:
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Microsoft IIS: در web.config داخل <customHeaders> اضافه کنید:
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
مرحله ۳ — کوچک آزمایش کنید، سپس متعهد شوید
با max-age=300 (۵ دقیقه) شروع کنید. تأیید کنید سایت همه جا به درستی بارگذاری میشود. سپس به max-age=31536000 (یک سال) بالا ببرید.
مرحله ۴ (اختیاری، استاندارد طلایی) — preload
وقتی مطمئن هستید و برای مدتی یک header یک ساله با includeSubDomains اجرا کردهاید، میتوانید دامنهی خود را در hstspreload.org ارسال کنید. این پنجرهی اولین بازدید را کاملاً میبندد.
اشتباهات رایج
- تنظیم
max-ageخیلی کوتاه. مقدار چند دقیقه یا چند ساعت به نظر پیکربندی شده است اما تقریباً هیچ محافظتی ارائه نمیدهد. - روشن کردن
includeSubDomainsقبل از آمادگی زیردامنهها برای HTTPS. اگر یک زیردامنه کاملاً روی HTTPS نیست، قانون چسبنده میتواند آن را برای بازدیدکنندگان غیرقابل دسترس کند. - اضافه کردن HSTS اما بدون تغییر مسیر HTTP-به-HTTPS. HSTS فرض میکند بازدیدکنندگان به نسخهی امن میرسند.
- پریدن مستقیم به
preloadبرای «کامل بودن». Preload سخت است که لغو شود. آن را به تدریج بعد از یک header پایدار یک ساله بدست آورید. - فرض کردن قفل پوشش میدهد. قفل و HSTS چیزهای متفاوتی هستند.
پرسشهای متداول
قبلاً HTTPS داریم و قفل نشان میدهد. مگر کافی نیست؟
نه — و این رایجترین سوءتفاهم است. قفل یعنی یک اتصال *میتواند* رمزگذاری شود؛ مرورگرها را مجبور نمیکند از نسخهی رمزگذاری شده استفاده کنند. بدون HSTS، یک مهاجم در همان شبکه میتواند بازدیدکننده را روی HTTP ساده (SSL stripping نامیده میشود) نگه دارد و همه چیزی را که تایپ میکند بخواند.
آیا روشن کردن این گران یا پرریسک است؟
خود اصلاح رایگان است — یک خط در سرور وب یا یک تاگل در CDN شماست — و حدود ۱۵ دقیقه طول میکشد. یک احتیاط واقعی: HSTS چسبنده است. مرورگر آن را به مدتی که مشخص کردهاید به یاد میآورد. پس قبل از روشن کردن آن به طور گسترده باید مطمئن باشید HTTPS روی سایت اصلی و هر زیردامنه کار میکند.
'خوب' واقعاً چه شکلی است؟
یک max-age حداقل یک سال (31536000 ثانیه). بررسی ما در یک سال یا بیشتر نمرهی کامل میدهد، در شش ماه نمرهی جزئی، در یک روز ضعیف/جزئی، و هر چیز زیر یک روز را عملاً غایب تلقی میکند. قویترین راهاندازی includeSubDomains و preload را نیز اضافه میکند.
preload چیست و آیا نیاز داریم؟
HSTS فقط بازدیدکننده را بعد از دیدن header برای اولین بار محافظت میکند — پس درخواست اول بازدیدکنندهی کاملاً جدید همچنان یک پنجرهی کوچک است. لیست preload HSTS، که در Chrome، Firefox، Safari و Edge تعبیه شده، آن پنجره را با ارسال دامنهی شما به مرورگرها از قبل میبندد. اختیاری و تعهد کمی بیشتر (حذف کند است)، اما استاندارد طلایی است.
روی Squarespace / Wix / Shopify هستیم — آیا اصلاً باید کاری انجام دهیم؟
بیشتر سازندگان وبسایت کاملاً میزبانی شده HTTPS را اجرا میکنند و اغلب HSTS را به طور خودکار تنظیم میکنند — پس ممکن است از قبل قبول شده باشید. استثنا زمانی است که از دامنهی سفارشی یا CDN جلوی سایتتان استفاده میکنید.
اگر رفع نکنیم، نمره را پایین میآورد؟
بله. HSTS یک بررسی امنیت وب امتیازدهی شده است، نه اطلاعاتی — یک header گمشده یا خیلی کوتاه امتیاز را پایین میآورد و با شدت بالا رتبهبندی میشود.