پروتکل HSTS چیست و چه کاربردی دارد؟ + آموزش نصب
در این مقاله میخوانید
پروتکل HSTS، یک پروتکل پیشرفتهی امنیتی برای وبسایتها است. این پروتکل مجوز استفاده از گواهیهای ناامن SSL را نمیدهد و این یعنی دوران SSLهای خود امضاء و … احتمالاً به سر آمده است. این مطلب از آموزش امنیت بلاگ پارس پک با بیانی ساده، به شما توضیح میدهد که HSTS چیست و چطور میتوان از آن روی وبسایت استفاده کرد. اگر شما هم به مسائل امنیت وب علاقمند هستید، تا پایان با این مطلب همراه باشید.
کاربرد پروتکل HSTS چیست؟
HSTS مخفف عبارت HTTP Strict Transport Security است که در سال ۲۰۱۲ برای جلوگیری از حملات MITM به وبسایتها معرفی شد و در توضیحی ساده، یک پروتکل امنیتی است که وبسایتها را از طریق عدم پذیرش گواهیهای SSL نامعتبر که ممکن است امنیت وبسایت را به خطر بیاندازند، ارتقا میدهد.
در حملات MITM، هکرها گواهی SSL وبسایت را حذف میکنند. این کار باعث میشود تا مرورگر فقط از پروتکل HTTP برای دسترسی به وبسایت استفاده کند و این یعنی همان راه نفوذی که هکرها کمین کردهاند تا از آن استفاده کنند؛ با این روش خیلی راحت میتوان به اطلاعات حساس، بدون رمزنگاری دسترسی پیدا کرد. این نوع از حملات، برای سرقت کوکیها هم استفاده میشود.
پروتکل HSTS دسترسی به وبسایت، بدون استفاده از پروتکل امن HTTPS را ممنوع میکند. با این روش حتی اگر گواهی SSL وبسایت را هم بتوان به طریقی حذف کرد، حداقل با پروتکل HTTP که همهمان میدانیم چقدر ضعف امنیتی دارد، نمیتوان به وبسایت متصل شد.
پروتکل HSTS کارکردی ساده دارد؛ مثل یک فرشتهی نگهبان کنار کاربران وبسایتتان میماند تا هیچ خطری آنها را تهدید نکند.
پروتکل HSTS، اما این بار کمی فنیتر!
حالا بیایید کارکرد پروتکل HSTS را کمی فنیتر بررسی کنیم. فرض کنید شما میخواهید به یک وبسایت وارد شوید که از سرویس HSTS استفاده میکند. اگر این وبسایت از HSTS استفاده کند، وقتی برای اولین بار به آن مراجعه میکنید، وب سرور اطلاعات این پروتکل را در Header پاسخی که برای Request شما ارسال میکند قرار میدهد و مرورگر هم این اطلاعات را ذخیره میکند.
حالا اگر یک بار دیگر بخواهید به این وبسایت وارد شوید و بهجای https:// از http:// هم استفاده کنید، مرورگر با همان دیتاهای هدر پروتکل HSTS که در خود ذخیره کرده، بهصورت خودکار شما را به صفحهی با اتصال امن https:// فوروارد و اطلاعات شما را بهصورت امن منتقل میکند. انگار که یک سپر محافظ، همیشه همراه شماست؛ حتی اگر یادتان برود که آن را با خود بردارید!
در صورت استفاده از HSTS در یک وبسایت، حتی اگر خود کاربر هم بخواهد پیغام امنیتی گواهی نامعتبر را لغو کند (همان کاری که ما معمولاً انجام میدهیم)، باز هم اجازهی انجام این کار به او داده نمیشود. چون پروتکل HSTS مانع دسترسی غیرمجاز به کوکیها هم بشود، بنابراین تمامی اطلاعات مهم و امنیتی مانند اطلاعات کارت بانکی و … که در کوکیها ذخیره میشوند، با استفاده از این روش ایمن باقی خواهند ماند.
نحوهی نصب پروتکل HSTS روی وبسایت
برای استفاده از پروتکل HSTS، ابتدا باید یک گواهی SSL معتبر روی هاست یا سرور وبسایت نصب کنید. بعد از این کار کافی است چند خط کُد به فایل .htaccess اضافه کنید.
اگر میخواهید علاوه بر استفاه از پروتکل HSTS، تمام Requestهایی هم که برای دسترسی به سایت بدون www دریافت میشود را به نسخهی دارای www ریدارکت کنید، میتوانید کُدهای زیر را در فایل .htaccess سرور یا هاست خود اضافه کنید:
RewriteEngine On # Set HSTS env var only if HTTPS RewriteCond %{HTTPS} on RewriteRule ^ - [E=HSTS:1] # Redirect HTTP to HTTPS on the same host RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # Redirect non-www to www (HTTPS only) RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # Set HSTS header for 365 days including subdomains conditionally if request is over HTTPS only (based on HSTS env var) Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HSTS
اما اگر فقط میخواهید از پروتکل HSTS استفاده کرده و کاری به درخواستهایی که به آدرس بدون www میرسد نداشته باشید، از کدهای زیر استفاده کنید:
RewriteEngine On # Set HSTS env var only if HTTPS RewriteCond %{HTTPS} on RewriteRule ^ - [E=HSTS:1] # Redirect HTTP to HTTPS on the same host RewriteCond %{HTTPS} !=on RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] # Redirect www to non-www (HTTPS only) RewriteCond %{HTTP_HOST} ^www\. RewriteRule ^ https://your-domain-name.com%{REQUEST_URI} [R=301,L] # Set HSTS header for 365 days including subdomains conditionally if request is over HTTPS only (based on HSTS env var) Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HSTS
پروتکل HSTS کاملاً ایمن است؟
اینکه هیچ چیز کاملاً کاملی در دنیا وجود ندارد، خودش یک قانون است! پروتکل HSTS هم همینطور است. مهمترین دلیلش هم این است که وقتی برای اولین بار به وبسایت متصل میشوید، توسط سرویس HSTS محافظت نمیشوید. یعنی اینکه حتی اگر وبسایت هدر HSTS را هم به کانکشن HTTP اضافه کند، در اولین مرتبهی اتصال، از این هدر استفاده نمیشود.
پس نکتهی اول این است که هدر HSTS نمیتواند سپر شوالیهایِ معروفتان را به شما تحویل دهد، مگر اینکه از طریق پروتکل HTTPS تحویل داده شود. نکتهی دوم هم قسمت max-age، در کُدی است که وب سرور خود اضافه کردید. هر بار که مرورگر هدر وبسایت را میخواند، max-age را هم بهروز میکند. تا چه زمانی این روند برقرار است؟ این زمان را در max-age تعیین کردهاید و مقدار حداکثر آن هم دو سال است. بنابراین اگر در این قسمت مقدار حداکثر را قرار دهید و بین دو بازدید شما از وبسایت، بیشتر از دو سال هم نگذرد، خیالتان میتواند کاملاً راحت باشد.
حالا اگر بیشتر از میزان زمانی که در قسمت max-age قرار دادهاید از وبسایت بازدید نکنید، مرورگر با آن وبسایت مثل یک سایت جدید رفتار کرده و پروتکل HSTS در اولین بازدید بعد از دو سال، عمل نمیکند.
برای آشنایی با مزایا و معایب و انواع گواهی امنیتی SSL مقاله زیر را از دست ندهید.
اضافه کردن دامنه به لیست پیش بارگذاری پروتکل HSTS
Preload List لیستی از دامنههایی است که مرورگر میداند همیشه باید با استفاده از پروتکل HSTS به آن وصل شود. برای اضافه کردن یک دامنه به این لیست، مراحل زیر را انجام دهید:
۱. اولین پیش نیاز برای اضافه کردن وبسایت به لیست پیش بارگذاری پروتکل HSTS این است که وبسایت گواهینامهی SSL معتبر داشته باشد.
۲. اگر پروتکل HTTP برای هر قسمت از وبسایت فعال است، حتماً باید آنها را به پروتکل HTTPS ریدایرکت کنید.
۳. مطمئن شوید که دو شرط بالا هم برای دامنهی اصلی و هم زیر دامنههای مربوط به آن، برقرار است.
۴. در هدر Strict-Transport-Security برای دامنهی اصلی، قسمت max-age را حداقل بر روی ۳۱۵۳۶۰۰۰ قرار دهید. این عدد برابر یک سال بر حسب ثانیه است.
۵. بعد از اینکه تمامی این کارها را انجام دادید، به وبسایت hstspreload.org بروید و آدرس دامنهتان را در باکس این وبسایت وارد کنید. اگر قسمتی از کار درست انجام نشده باشد، این موضوع با یک پیغام به اطلاع شما میرسد. نمونهی این موضوع را میتوانید در شکل زیر ببینید:
گام اول: بررسی گواهی SSL
مطمئن شوید که یک گواهی SSL معتبر روی وبسایتتان نصب شده است.
گام دوم: ریدایرکت به HTTPS
تمامی ترافیک HTTP وبسایت را به HTTPS ریدایرکت کنید.
گام سوم: بررسی دامنهی اصلی و تمام ساب دامینها
مطمئن شوید که دو گام قبلی هم برای دامین اصلی و هم برای تمامی زیردامنهها اعمال شده باشد.
گام چهارم: اضافه کردن هدر HSTS
هدر HSTS را اضافه کنید. قسمت max-age را حداقل روی ۳۱۵۳۶۰۰۰ تنظیم کنید.
گام پنجم: اطمینان از تنظیمات صحیح
به وبسایت hstspreload.org بروید؛ وبسایت خود را در این سایت وارد کنید و مطمئن شوید که همهی تنظیمات را درست انجام دادهاید.
باز هم تأکید میکنیم قبل از اینکه تصمیم به استفاده از سرویس HSTS بگیرید، ابتدا مطمئن شوید که از یک گواهی SSL معتبر و دارای تاریخ انقضای مناسب استفاده میکنید. در غیر اینصورت وبسایت شما حتی ممکن است بهطور کلی از دسترس خارج شود.
برای آشنایی با ۵ تفاوت اصلی http و https مقاله زیر را بخوانید.
چطور یک دامنه را از کش HSTS مرورگر حذف کنیم؟
بعضی وقتها نیاز دارید تا کش پروتکل HSTS مرورگر خود را پاک کنید. مثلاً وقتی که تنظیمات HSTS را اشتباه وارد میکنید، ممکن است هیچ راهی برای ورود به وبسایت نداشته باشید، مگر اینکه این کش را پاک کنید. البته به این نکته هم توجه کنید که اگر دامنهی شما در لیست Preload سرویس HSTS باشد، پاک کردن کش نمیتواند مشکتان را حل کند. در این موارد فقط باید وبسایت را بهطریقی با همان پروتکل HTTP باز کنید.
۱. پاک کردن کش پروتکل HSTS در گوگل کروم
اگر از کروم استفاده میکنید، با گامهای زیر میتوانیدکش پروتکل HSTS را پاک کنید:
۱. این آدرس را در مرورگر خود وارد کنید: chrome://net-internals/#hsts
باید صفحهای مشابه تصویر زیر را ببینید:
۲. بخش Domain Security Policy را انتخاب کرده و سپس از قسمت Delete Domain Security Policies، آدرس دامنهتان را وارد کرده و سپس روی Delete کلیک کنید.
۳. حالا برای اینکه بررسی کنید که آیا حذف کش با موفقیت انجام شده یا نه، آدرس دامنهی خود را در قسمت Query HSTS/PKP Domain وارد کرده و سپس روی کلید Query کلیک کنید. اگر دیتاهای وبسایت با موفقیت حذف شده باشد، باید پیغام Not Found برای شما به نمایش درآید. در غیر اینصورت مراحل را یک بار دیگر و اینبار با دقت بیشتری انجام دهید.
۲. پاک کردن کش پروتکل HSTS در موزیلا فایرفاکس
برای پاک کردن کش پروتکل HSTS در موزیلا فایرفاکس، روشهای زیادی وجود دارد. یکی از بهترین و سادهترینِ این روشها در ادامه توضیح داده شده است؛ فقط بهتر است بدانید که این روش علاوه بر کش HSTS، برخی از اطلاعات دیگر کش را هم حذف میکند.
۱. ابتدا تمامی Tabهای وبسایتتان را ببندید.
۲. مسیر Library > History > Show all History را انتخاب کنید.
۳. دامین مدنظرتان را از طریق Search Bar جستجو کنید.
۴. بعد از پیدا کردن آدرس دامنه، روی آن کلیک راست کنید و سپس گزینهی Forget about this site را انتخاب کنید:
۵. حالا فایرفاکس را دوباره راهاندازی کنید.
۳. پاک کردن کش پروتکل HSTS در Safari
اگر کاربر اپل هستید و از سافاری استفاده میکنید، برای پاک کردن کش سرویس HSTS از روی این مرورگر، ۳ گام زیر را به ترتیب طی کنید:
۱. مرورگر خود را ببندید.
۲. فایل HSTS.plist را از مسیر Library > Cookies > HSTS.plist پیدا و سپس حذف کنید.
۳. مرورگر سافاری را دوباره باز کنید.
۴. پاک کردن کش پروتکل HSTS از Internet Explorer
خاطرتان جمع باشد؛ اینترنت اکسپلورر همینجا هم قرار نیست شما را امیدوار کند! شما نمیتوانید یک دامنه را از کش HSTS پاک کنید. تنها کاری که میتوانید انجام دهید این است که پروتکل HSTS را بهصورت موقت خاموش کنید؛ آن هم نه در ویندوز ۱۰! فقط در ویندوز ۷ یا ۸.۱ و باز هم البته فقط در اینترنت اکسپلورر ۱۱! اما یک سؤال واقعاً ذهنم را درگیر کرده! واقعاً هنوز از اینترنت اکسپلورر استفاده میکنید؟!
برای آشنایی با SSL و TLS و تفاوتهای اساسی بین آنها مقاله زیر را بخوانید.
جمعبندی
پروتکل HSTS سیستم امنیتی است که اگر امنیت کاربران وبسایت برایتان اهمیت زیادی داشته باشد، احتمالاً خیلی بهدنبال آن بودهاید. اگر روی وبسایت خود از گواهی SSL غیرمعتبر استفاده کرده باشید و یا هکرها توانسته باشند این گواهی را به طریقی حذف کنند، سرویس HSTS اجازهی دسترسی به وبسایت را، حتی با رد کردن پیغام خطای امنیتی مرورگر، به کاربران نمیدهد. در این مطلب از بلاگ پارس پک، علاوه بر ارائهی اطلاعات کاملی در مورد این سرویس، نحوهی نصب آن را هم بر روی وبسایت آموزش دادهایم.
سؤالات متداول
۱. پروتکل HSTS چیست؟
پروتکل HSTS یک سرویس امنیتی است که امکان ورود به وبسایت را بدون اینکه یک گواهی SSL معتبر روی آن نصب شده باشد را نمیدهد.
۲. پروتکل HSTS چطور کار میکند؟
پروتکل HSTS یک هدر در پاسخ ارسال شده برای مرورگر قرار میدهد که بر اساس آن، نمیتوان به وبسایت متصل شد مگر اینکه از پروتکل HTTPS در وبسایت استفاده شده باشد.
۳. چرا باید از پروتکل HSTS در وبسایتها استفاده کرد؟
پروتکل HSTS توانایی مقابله با حملات MITM را دارد. در این حملات، هکرها گواهی SSL وبسایت را بهطریقی حذف کرده و وقتی کاربران با HTTP به وبسایت متصل شدند، اطلاعات آنها را سرقت میکنند. با توجه به اینکه سرویس HSTS اجازهی دسترسی به وبسایت بدون HTTPS را به هیچ عنوان نمیدهد، امنیت کاربران بیشتر تأمین میشود.