HSTS چیست؟ HSTS (HTTP Strict Transport Security) یک مکانیسم امنیتی است که توسط مرورگرها و سرورها برای تضمین انتقال امن دادهها استفاده میشود. HSTS به سرور اجازه میدهد تا به مرورگرها اعلام کند که تنها از طریق HTTPS به وبسایت دسترسی پیدا کنند و از HTTP ناامن اجتناب کنند. در این مقاله، به طور کامل و جامع به توضیح HSTS، نحوه کارکرد آن، مزایا و معایب، و نحوه پیادهسازی آن خواهیم پرداخت.
پروتکل HSTS چیست؟
HSTS مخفف HTTP Strict Transport Security است که یک پروتکل امنیتی وب است که به منظور محافظت از وب سایت ها در برابر حملات هکری مانند شنود و حمله Man-in-the-Middle طراحی شده است.
هنگامی که یک وب سایت از HSTS استفاده می کند، به مرورگر وب شما دستور می دهد که فقط از طریق HTTPS به آن وب سایت متصل شود، نه HTTP. این امر به این معنی است که حتی اگر شما به طور تصادفی آدرس وب سایت را با “http://” به جای “https://” تایپ کنید، مرورگر شما به طور خودکار شما را به نسخه امن تر هدایت می کند.
تاریخچه HSTS
HSTS اولین بار در سال 2012 به عنوان یک استاندارد اینترنتی توسط IETF (گروه ویژه مهندسی اینترنت) معرفی شد. این استاندارد در پاسخ به نیاز برای افزایش امنیت در وب، به ویژه در برابر حملات مرد میانی (Man-in-the-Middle)، توسعه یافت. قبل از معرفی HSTS، بسیاری از وبسایتها از پروتکل HTTP استفاده میکردند که به طور بالقوه اجازه میداد اطلاعات حساس کاربران به راحتی رهگیری شوند.
HSTS چگونه کار میکند؟
HSTS با ارسال یک هدر HTTP خاص به نام Strict-Transport-Security
از سرور به مرورگر کار میکند. این هدر شامل پارامترهایی است که به مرورگر دستور میدهد تا برای مدت زمان مشخصی تنها از HTTPS برای ارتباط با وبسایت استفاده کند. به طور دقیقتر، فرآیند به این صورت انجام میشود:
- درخواست اولیه به وبسایت: هنگامی که یک کاربر برای اولین بار به یک وبسایت دسترسی پیدا میکند، ممکن است از پروتکل HTTP یا HTTPS استفاده کند.
- پاسخ سرور با هدر HSTS: اگر کاربر از طریق HTTP متصل شود، سرور بلافاصله کاربر را به نسخه HTTPS هدایت میکند و در پاسخ خود هدر
Strict-Transport-Security
را شامل میکند. - ذخیرهسازی هدر HSTS در مرورگر: مرورگر هدر HSTS را دریافت کرده و پارامترهای آن را ذخیره میکند. این پارامترها شامل مدت زمان (max-age) هستند که مرورگر باید تنها از HTTPS برای این وبسایت استفاده کند.
- اجبار به استفاده از HTTPS: در تمامی بازدیدهای بعدی، حتی اگر کاربر به صورت دستی آدرس HTTP را وارد کند، مرورگر به طور خودکار از HTTPS استفاده خواهد کرد.
اجزای هدر HSTS چیست؟
هدر HSTS شامل چندین پارامتر است که هر کدام وظیفه خاصی دارند:
- max-age: این پارامتر مدت زمان (به ثانیه) را مشخص میکند که مرورگر باید سیاست HSTS را اعمال کند. به عنوان مثال،
max-age=31536000
به معنای یک سال است. - includeSubDomains: اگر این پارامتر تنظیم شود، سیاست HSTS برای تمامی زیر دامنههای وبسایت نیز اعمال خواهد شد. این به خصوص برای وبسایتهایی که دارای چندین زیر دامنه هستند مفید است.
- preload: این پارامتر به وبسایت اجازه میدهد تا در لیست پیشبارگذاری HSTS قرار گیرد. مرورگرهایی که از این لیست استفاده میکنند، حتی قبل از اولین بازدید، از سیاست HSTS پیروی خواهند کرد.
مزایای استفاده از HSTS چیست؟
افزایش امنیت وبسایت:
HSTS تضمین میکند که مرورگر همیشه از HTTPS برای اتصال به وبسایت استفاده میکند، حتی اگر کاربر به صورت دستی آدرس HTTP را وارد کند. این ویژگی به جلوگیری از حملات مرد میانی (MITM) کمک میکند که در آن حملهکننده میتواند ترافیک بین کاربر و سرور را رهگیری و تغییر دهد. با استفاده از HSTS، احتمال موفقیت حملاتی مانند «حذف SSL» که در آن حملهکننده تلاش میکند اتصال HTTPS را به HTTP تغییر دهد، به طور قابل توجهی کاهش مییابد.
بهبود تجربه کاربری:
کاربران به طور خودکار به نسخه امن وبسایت هدایت میشوند. این امر نه تنها تجربه کاربری بهتری را فراهم میکند، بلکه اعتماد کاربران به امنیت وبسایت را نیز افزایش میدهد. HSTS باعث کاهش زمان بارگذاری صفحات میشود، زیرا مرورگرها دیگر نیازی به انجام درخواستهای اضافی برای تغییر از HTTP به HTTPS ندارند.
حفظ حریم خصوصی کاربران:
با استفاده از HSTS، اطلاعات حساس کاربران مانند اطلاعات ورود، اطلاعات پرداخت و دادههای شخصی دیگر از طریق یک کانال امن و رمزگذاری شده منتقل میشوند. این امر به حفظ حریم خصوصی کاربران کمک شایانی میکند.
جلوگیری از افشای اطلاعات حساس در شبکههای عمومی و ناامن یکی از اهداف اصلی HSTS است که با اجباری کردن استفاده از HTTPS به این هدف دست مییابد.
پشتیبانی مرورگرهای مدرن:
HSTS توسط اکثر مرورگرهای مدرن از جمله Chrome، Firefox، Safari و Edge پشتیبانی میشود. این به معنای آن است که اکثر کاربران اینترنت میتوانند از مزایای این مکانیسم امنیتی بهرهمند شوند.
تسهیل در مدیریت امنیت:
HSTS به مدیران وبسایت کمک میکند تا سیاستهای امنیتی خود را به صورت مرکزی و سیستماتیک مدیریت کنند. با استفاده از هدر HSTS، مدیران میتوانند به راحتی مشخص کنند که تمامی ارتباطات با وبسایت باید از طریق HTTPS انجام شود.
معایب و محدودیتهای HSTS چیست؟
نیاز به پشتیبانی مرورگر و سرور:
برای اینکه HSTS به درستی عمل کند، هم مرورگر کاربر و هم سرور وبسایت باید از این مکانیسم پشتیبانی کنند. اگر یک مرورگر قدیمی یا یک سرور ناصحیح پیکربندی شده باشد، HSTS ممکن است به درستی کار نکند. برخی از مرورگرهای قدیمی و دستگاههای قدیمی ممکن است از HSTS پشتیبانی نکنند، که میتواند به مشکلاتی در دسترسی کاربران به وبسایت منجر شود.
خطر خطاهای پیکربندی:
پیکربندی نادرست HSTS میتواند باعث ایجاد مشکلات دسترسی شود. برای مثال، اگر گواهی SSL/TLS منقضی شود یا به درستی نصب نشده باشد، کاربران نمیتوانند به وبسایت دسترسی پیدا کنند زیرا مرورگر به خاطر سیاست HSTS از اتصال ناامن جلوگیری میکند. تنظیمات نادرست در پارامترهای HSTS مانند max-age
یا includeSubDomains
میتواند به مشکلاتی منجر شود که رفع آنها زمانبر و پیچیده است.
مدت زمان اعتبار (max-age):
انتخاب مدت زمان اعتبار مناسب برای HSTS (max-age
) بسیار حیاتی است. اگر مدت زمان اعتبار خیلی کوتاه باشد، HSTS کارایی خود را از دست میدهد و اگر خیلی طولانی باشد، ممکن است تغییرات ضروری در پیکربندی وبسایت به سرعت اعمال نشود.
تعیین مدت زمان اعتبار طولانی میتواند باعث مشکلاتی در آینده شود، به خصوص اگر نیاز به تغییراتی در گواهیهای SSL/TLS یا دیگر تنظیمات امنیتی وبسایت وجود داشته باشد.
عدم امکان بازگشت به HTTP:
یکی از معایب HSTS این است که پس از فعالسازی، بازگشت به HTTP بسیار مشکل است. حتی اگر مدیر وبسایت بخواهد HSTS را غیرفعال کند، مرورگرها تا پایان مدت زمان max-age
همچنان به استفاده از HTTPS ادامه خواهند داد.
این ویژگی میتواند در مواردی که مشکلاتی در گواهی SSL/TLS یا پیکربندی HTTPS وبسایت وجود دارد، به یک نقطه ضعف تبدیل شود.
پیشبارگذاری (Preload):
اگر یک وبسایت در لیست پیشبارگذاری HSTS ثبت شده باشد، حذف آن از این لیست میتواند فرآیندی پیچیده و زمانبر باشد. این لیست توسط مرورگرها استفاده میشود و حتی قبل از اولین بازدید، مرورگرها سیاست HSTS را برای این وبسایت اعمال میکنند.
در صورتی که مدیر وبسایت بخواهد وبسایت را از این لیست حذف کند، باید مراحل خاصی را طی کند که ممکن است نیاز به زمان و تلاش زیادی داشته باشد.
چرا کسب و کار شما باید HSTS را پیادهسازی کند؟
شما هرگز فروشگاه فیزیکی یا خانهی خود را بدون قفل کردن درها ترک نمیکنید. حتی ممکن است با نصب ردیابهای فلزی در درها، از دزدی اقلام جلوگیری کنید. دادهها میتوانند به اندازه اقلام فیزیکی موجود در مغازه یا خانهی شما ارزشمند باشند. بنابراین، مهم است که دادهها را قفلشده و ایمن نگه دارید. قفل کردن وبسایت شما گاهی اوقات کافی نیست زیرا افراد از طریق //:http هنوز هم راهی برای دسترسی به وبسایت شما پیدا میکنند.
پروتکل HSTS مرورگرها و اتصالات اپلیکیشنها را مجبور میکند در صورت وجود HSTTP از این پروتکل استفاده کنند. این موضوع حتی در صورتی که شخص فقط www یا http:// را تایپ کند نیز صادق است.
HTTPS یک عامل کوچک در بحث رنکینگ گوگل است و در کنار بسیاری از عوامل دیگر مانند سرعت صفحه و واکنشگرا بودن در موبایل، به عنوان امتیاز «کیفیت سایت» قرار میگیرد.
تنظیم ریدایرکتهای 301 از http:// به https:// برای ایمن کردن کامل نام دامنهی شما کافی نیست. در این شرایط، افراد هنوز هم میتوانند با ریدایرکت ناامن HTTP فرصت لازم را به دست آورند.
$ curl --head http://www.facebook.com HTTP/1.1 301 Moved Permanently Location: https://www.facebook.com/
هکرها هنوز هم میتوانند کوکیهای سایت، شناسه جعلی (معمولا به عنوان پارامتر URL ارسال میشوند) را ثبت کنند یا کاربران را مجبور به ریدایرکت به سایت فیشینگ خود کنند که دقیقا شبیه وبسایت شماست!
اما با نصب هدر Strict-Transport-Security، تقریبا غیرممکن خواهد بود که افراد شرور بتوانند اطلاعات را جمعآوری کنند.
$ curl --head https://www.facebook.com HTTP/1.1 200 OK Strict-Transport-Security: max-age=15552000; preload
HSTS Preloading چیست؟
پریلودینگ HSTS که با عنوان پیشبارگذاری و بارگذاری اولیه نیز شناخته میشود تابعی است که در مرورگر تعبیه شده است. به موجب این تابع، لیستی از میزبانها سیاست «فقط استفاده از HTTPS» را در سایت خود اعمال میکنند.
این لیست توسط Chromium Project گردآوری شده است و توسط مرورگرهای کروم، فایرفاکس و سافاری استفاده میشود. این سایتها برای اجرای این سیاست به صدور هدرهای پاسخ HSTS وابسته نیستند. در عوض، مرورگر از قبل آگاه است که نام دامنه فقط نیاز به استفاده از HTTPS دارد و قبل از هرگونه اتصال یا ارتباطی، HSTS را فعال میکند.
با این رویه، فرصتی که مهاجم برای رهگیری و دستکاری ریدایرکتها از طریق HTTP نیاز دارد از بین میرود. در این سناریو هدر پاسخ HSTS همچنان مورد نیاز است و باید برای آن دسته از مرورگرهایی که از فهرستهای HSTS پریلود شده استفاده نمیکنند، کنار گذاشته شود.
HSTS تا چه اندازه محبوب است؟
گوگل به طور رسمی یک سیاست امنیتی HSTS را در 29 ژانویه 2016 ارائه کرد، اما پروژهی HSTS برای اولینبار مدت کوتاهی پس از انتشار یادداشت M-15-13 توسط دفتر اجرایی رئیس جمهور آمریکا راهاندازی شد. این یادداشت در واقع خط مشی اصلی نیازمندیهای مربوط به اتصالات ایمن در وبسایتها و خدمات وب فدرال را مشخص میکرد.
همچنین در اوایل سال 2015 تلاش قویتری در این زمینه صورت گرفت و امروزه فیسبوک، گوگل، جیمیل، توییتر و پی پال تنها برخی از شبکههای اجتماعی و درگاههای پرداخت اصلی هستند که HSTS را پیادهسازی میکنند.
پیادهسازی HSTS برای وبسایت
اگر از زیردامنهها در ساختار محتوای خود استفاده میکنید، برای خرید SSL باید به سراغ یک گواهی Wildcard بروید تا فقط HTTPS را پوشش دهد. در غیراینصورت، شما با خرید یک گواهینامه SSL از نوع Domain Validated، Organization Validated یا Extended Validation میتوانید مطمئن باشید که ایمن هستید. البته پس از خرید یکی از انواع گواهی SSL باید مطمئن شوید که آنها را به خوبی نصب کردهاید و به درستی کار میکنند.
مراحل اولیه که در زیر به آنها اشاره شده است، اپلیکیشنهای تحت وب، ورود کاربر و مدیریت Session شما را آزمایش میکند.
HSTS هر پنج دقیقه منقضی میشود.
آزمایش را برای یک هفته و یک ماه ادامه دهید.
هرگونه مشکلی که ممکن است در استقرار شما ایجاد شود را برطرف کنید.
max-age=xxx را اصلاح کنید. One week = 604800 و One Month = 2592000
پس از اتمام آزمایشها، preload را اضافه کنید.
پس از اینکه مطمئن شدید HSTS با اپلیکیشنهای تحت وب شما کار میکند، max-age را به 63072000 تغییر دهید. این مقدار برابر است با دو سال. این همان چیزی است که پروژه کرومیوم (Chromium Project) میخواهد در ارسال preload شما ببیند.
الزامات HSTS چیست؟
- وبسایت شما باید دارای گواهینامه SSL معتبر باشد. اگر یک SSL رایگان دریافت کردهاید میتوانید اعتبار آن را با ابزار SSL Checker سایت GlobalSign بررسی کنید.
- همه پیوندهای HTTP را با یک ریدایرکت دائمی 301 به HTTPS هدایت کنید.
- همه زیردامنهها باید در گواهی SSL شما پوشش داده شوند. خرید یک گواهی وایلدکارت را در نظر بگیرید.
- یک هدر HSTS را در دامنهی پایه برای درخواستهای HTTPS ارائه کنید.
- پارامتر max-age باید حداقل 10886400 ثانیه یا 18 هفته باشد. همانطور که در بالا ذکر شد، بهتر است مقدار این پارامتر را به 2 سال افزایش دهید.
- اگر از دستورالعمل includeSubDomains بهره میبرید، آنها را مشخص کنید.
- دستورالعمل preload باید مشخص شود.
نصب HSTS برای وب سرور آپاچی
میتوانید متن زیر را به فایل htaccess. در پوشه اصلی سند سطح بالا مانند public_html یا httpdoc اضافه کنید.
# Use HTTP Strict Transport Security to force client to use secure connections only Header always set Strict-Transport-Security "max-age=300; includeSubDomains; preload"
نصب HSTS برای lighttpd
این متن را به فایل پیکربندی lighttpd خود در دایرکتوری etc/lighttpd/lighttpd.conf/ اضافه کنید.
server.modules += ( “mod_setenv” ) $HTTP[“scheme”] == “https” { setenv.add-response-header = (“Strict-Transport-Security” => “max-age=300; includeSubDomains; preload”) }
نصب HSTS برای NGINX
این متن را به فایل site.conf اضافه کنید.
add_header Strict-Transport-Security 'max-age=300; includeSubDomains; preload; always;'
نصب HSTS برای سرورهای IIS
protected void Application_BeginRequest(Object sender, EventArgs e) { switch (Request.Url.Scheme) { case "https": Response.AddHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains; preload"); break; case "http": var path = "https://" + Request.Url.Host + Request.Url.PathAndQuery; Response.Status = "301 Moved Permanently"; Response.AddHeader("Location", path); break; } }
هنگامی که این متنها را به فایلهای مربوطه اضافه کردید، به فرم درخواست Preloading بروید و وبسایت خود را در لیست Preloading فهرست کنید. قرارگیری دامنهی شما در آن لیست ممکن است کمی زمان ببرد.
جمع بندی
HSTS یک ابزار قوی و مؤثر برای افزایش امنیت وبسایتها و حفاظت از اطلاعات کاربران است. با این حال، پیادهسازی و مدیریت صحیح آن نیازمند دانش و دقت بالاست تا از مشکلات احتمالی جلوگیری شود. مزایای HSTS از جمله افزایش امنیت، بهبود تجربه کاربری، و حفظ حریم خصوصی کاربران، بسیار برجسته هستند. با این حال، معایب و محدودیتهای آن نیز باید مد نظر قرار گیرند و به دقت مدیریت شوند تا اطمینان حاصل شود که این مکانیسم امنیتی به درستی عمل میکند و به اهداف امنیتی خود دست مییابد.
سوالات متداول
HSTS چیست؟
HSTS مخفف عبارت «HTTP Strict Transport Security» به معنی امنیت انتقال صریح برای HTTP است. HSTS روشی است که وبسایتها از آن برای اعلام اینکه فقط باید از طریق یک اتصال امن (HTTPS) به آنها دسترسی داشت استفاده میکنند. اگر یک وبسایت خط مشی HSTS را اعلام کند، مرورگر باید تمام اتصالات HTTP را رد کرده و از پذیرش گواهینامههای ناامن SSL توسط کاربران جلوگیری کند.
دلالیل اهمیت استفاده از HSTS چیست؟
HSTS این امکان را به شما میدهد تا از حملات MITM که از طریق حذف SSL یا «SSL Stripping» انجام میشود مصون بمانید. SSL Stripping تکنیکی است که در آن مهاجم مرورگر را مجبور میکند تا با استفاده از HTTP به یک سایت متصل شود تا بتواند بستهها را شنود کند و اطلاعات حساس را رهگیری کرده یا تغییر دهد. HSTS همچنین برای محافظت در برابر هایجک کوکیها یک روش خوب و کارآمد به حساب میآید.
HSTS Preloading چیست و چگونه از آن استفاده کنیم؟
برای اطمینان از اینکه کاربران شما از اولینباری که از سایت شما بازدید میکنند محافظت میشوند، میتوانید سایت خود را به لیست پیشبارگذاری HSTS در مرورگر اضافه کنید. این یعنی نسخه بعدی مرورگر نیز سایت شما را در لیست ثابتی از سایتهایی قرار میدهد که فقط با استفاده از HTTPS بارگذاری میشوند.