HSTS چیست و چگونه کمک کننده انتقال امن به HTTPS است؟
HTTP Strict Transport Security یا به اختصار HSTS به عنوان یک مکانیزم امنیتی شناخته می شود. با استفاده و راه اندازی پروتکل HSTS احتمال حملات هکرها به میزان قابل توجهی کاهش می یابد. HSTS به معنای عبارت انتقال صریح برای HTTP است.
امروزه امنیت وب سایت ها یکی از مهمترین دغدغه ها برای کاربران است. وب سایت هایی که در آن ها SSL فعال شده است و دارای قفل سبز رنگ هستند دارای امنیت هستند. در واقع پروتکل امن HTTPS با استفاده از رمز نگاری به کمک SSL، به انتقال امن اطلاعات بین کاربر و وب سایت کمک می کند.
برای اطلاع از نصب رایگان SSL روی هاست به مقاله مربوطه می توانید مراجعه کنید.
استفاده از این نوع رمز نگاری باعث حفاظت اطلاعات در مقابل هکرها می شود. فعال سازی SSL برای وب سایت کار سختی نیست و بسیاری از وب سایت ها از آن استفاده کرده اند. این کار باعث افزایش اعتبار وب سایت برای کاربران نیز می شود. با همه اینها هنوز هم HTTPS اشکالاتی دارد و به همین منظور استفاده از پروتکل HSTS در مواردی پیشنهاد شده است.
در ابتدا تصور می شد که HTTPS امنیت اطلاعات را به صورت کامل برقرار می کند. بعد از مدتی اشکال امنیتی که در زمان انتقال آدرس از HTTP به HTTPS وجود داشت آشکار شد. در این زمان لزوم وجود روشی به نام HSTS بسیار احساس شد.
در توضیح این نوع از اختلال در امنیت می توان گفت که در ابتدا کاربر درخواست خود را ارسال می کند. هکر در این بین در حال شنود ارتباط است. در لحظه ای که درخواست کاربر ارسال می گردد، هکر این ارتباط را قطع می کند. هکر کاری می کند تا به جای اینکه درخواست کاربر با کد redirect 301 پاسخ داده شود، صفحه جعلی خودش را بفرستد. با این کار کاربر تمام اطلاعات خودش را در صفحه جعلی ارسال شده به مرورگر توسط هکر وارد می کند. به این نوع حملات، حمله مرد میانی گفته می شود.
در مورد اینکه ریدایرکت چیست و چه تاثیری بر سئو دارد مطالبی را در مقاله مشخص شده می توانید مطالعه کنید.
حمله SSL strip
هکر درخواست کاربر را به سرور ارسال می کند و بدین طریق گواهینامه SSL را در اختیار می گیرد. به این نوع حمله SSL stripping attack گفته می شود که باعث شده تا پروتکل HSTS ایجاد شود. بسیاری حملات دیگر به وب سایت وجود دارد که در مقاله انواع حملات به وب سایت چند مورد آن ذکر شده است.
در واقع SSL strip در بین سرور و کاربر قرار دارد. ارتباط با کاربر از طریق HTTP است و با سرور از نوع HTTPS است. دامنه گوگل نیز از پروتکل HSTS استفاده می کند. در صورتی که وبمستر به پروتکل HSTS تغییر کند، کاربرانی که از HTTP استفاده می کنند قادر نخواهند بود سایت های مربوطه را ببینند. از سال 2016 شرکت گوگل رسما این مورد را بیان کرده است.
در حمله SSL stripping هکر در زمان رسیدن درخواست به سرور، برای شما دسترسی به یک نسخه ناامن از وب سایت را امکان پذیر می کند و اطلاعات شما را سرقت می کند. فعال سازی HSTS باعث می شود تا مرورگر یک نسخه امن از وب سایت را در دسترس قرار دهد. در این صورت ریدایرکت ها و فراخوانی ها برای باز شدن یک اتصال HTTP در نظر گرفته نخواهد شد.
این پروتکل در سال 2012 مطرح شد که باعث می شود وب سایت ها تنها با ارتباط امن در دسترس باشند و کاربر تنها وب سایتی را مشاهده کند که امنیت دارد. این پروتکل از هدر strict-transport-security استفاده می کند. بدین صورت حتی اگر آدرس سایت در مرورگر با HTTP وارد شود، مرورگر قبل برقراری ارتباط آن را تغییر می دهد.
در پیام ارسال شده به سرور که در آن HSTS header وجود دارد، اطلاعاتی به نام max-age وجود دارد. در این فیلد مدت زمانی به ثانیه مشخص شده که نشان دهنده طول مدت اعتبار است. این اعتبار مشخص می کند که تا مدت زمان تعیین شده همه ارتباطات کاربر از طریق HTTPS برقرار شود.
معایب
اما چند مشکلات نیز در استفاده از HSTS وجود دارد. یکی در اولین ارتباط بین سرور و مرورگر است؛ زیرا در اولین ارتباط احتمال برقراری ارتباط از نوع HTTP وجود دارد. دومین مشکل نیز در بحث همین زمان اعتبار است؛ زیرا پس از گذشت این مدت زمان نیز مجدد مشکل نخستین ارتباط را خواهیم داشت.
در واقع می توان گفت مرورگر کاربر باید HSTS header را حداقل یک بار قبل از بازدید های مجدد دیده باشد. یعنی باید یک بار فرآیند تبدیل از HTTP به HTTPS طی شده باشد. پس در اولین ارتباط امکان نا امن بودن وجود دارد.
برای اینکه چنین مشکلی وجود نداشته باشد، کروم فهرستی از وب سایت هایی را که HSTS دارند تهیه کرده است و آن ها را از پیش بارگذاری می کند. بدین طریق یک ارتباط امن از نخستین بازدید برای کاربر فراهم می شود.
برای فعالسازی HSTS لازم است تا گواهی SSL برای وب سایت وجود داشته باشد. با اضافه کردن هدری به شکل زیر به فایل htaccess می توان HSTS را فعال کرد.
Strict-Transport-Security: max-age=31536000; includeSubDomainsرفع مشکل
برای رفع این مشکلات همانطور که گفته شد استفاده از فهرستی توصیه شده که این فهرست به نام HSTS preload نامگذاری شده است. به این فهرست در مرورگر ها hardcode گفته می شود. این فهرست به بخشی از کد های اصلی نرم افزار افزوده می شود و امکان تغییر یا حذف برای آن وجود ندارد.
از جمله مرورگرهایی که از این پروتکل پشتیبانی می کنند به google chrome، firefox، safari، opera، internet explorer 11، microsoft edge و blackberry10 می توان اشاره کرد.