اگر شما مالک یک وبسایت باشید احتمالا گواهینامه SSL را فعال کردهاید و قفل امنیتی سبز رنگ ایمن بودن وبسایتتان، در هنگام بارگذاری بر بالای مرورگر خودنمایی میکند. با این حال ممکن است شما فراموش کرده باشید تا قابلیت امنیتی انتقال مستحکم HTTP (HTTP Strict Transport Security) را نیز به کار بگیرید. این ویژگی به HSTS مشهور است. اما به زبان سادهتر HSTS چیست و چطور میتواند به افزایش ضریب ایمنی وبسایت شما کمک نماید؟ برای یافتن پاسخ تا انتها همراه ما باشید.
HTTPS چیست؟
در ابتدا لازم است در مورد HTTPS یا همان پروتکل امن انتقال ابرمتن بیشتر بدانید. این پروتکل نسخه ایمن HTTP محسوب میشود. رمزگذاری در آن با استفاده از برقراری پروتکل امنیتی لایه انتقال که به SSL مشهور است، انجام و به همراه یک گواهی SSL مورد تایید قرار میگیرد. بنابراین زمانی که شما از یک سایت HTTPS استفاده میکنید، اطلاعات رد و بدل شده بین شما و وبسایت، رمزگذاری میشود. این کار کمک میکند تا از شما در مقابل سرقت اطلاعات که با شیوه موسوم به حمله مرد میانی یا MITM رخ میدهد، محافظت گردد. لایه حفاظتی اضافی نیز این قابلیت امنیتی را بهبود میبخشد تا شهرت وبسایت شما دچار خدشه نگردد!
در واقع اضافه کردن یک گواهی SSL بسیار ساده است و بسیاری از شرکتهای خدمات میزبانی وب به صورت رایگان به شما آن را ارایه میدهند. با این حال پروتکل HTTPS نیز دارای برخی نقایص است که HSTS میتواند به حل این کاستیها کمک نماید.
HSTS چیست؟
خیلی ساده HSTS یک واکنش یا پاسخ اولیه است که به مرورگر اطلاع میدهد پروتکل امن HTTPS فعال بوده و امکان دسترسی به وبسایت تنها از طریق این پروتکل امن امکانپذیر است. این فرمان سبب میگردد مرورگر شما تنها از طریق نسخه مجهز به پروتکل HTTPS به وبسایت مورد نظر و دیگر بخشهای آن متصل گردد.
اما اهمیت این فرمان به مرورگر، زمانی بیش آشکار میشود که شما گواهینامه SSL را نیز برای وبسایت خود تهیه کرده و پروتکل HTTPS را فعال کردهاید ولی به طور اتفاقی هنوز وبسایت شما از طریق پروتکل ناامن HTTP در دسترس باشد و کاربران بتوانند از آن آدرس وارد سایت شوند. این واقعه بسیار شایع است و حتی اگر شما تنظیمات را به صورتی تغییر دهید که به دایرکت دائمی 301 منتقل شود، باز هم مشکل پابرجا خواهد بود. بنابراین در اینجاست که HSTS وارد عمل شده و در صورت وجود نسخه امن HTTPS، مرورگر را ملزم به استفاده از آن مینماید.
تدوین اطلاعات و قوانین HSTS کمی با مشکل روبهرو بود و به طول انجامید به همین دلیل گوگل پیگیری استفاده همگانی از آن را در سال 2016 رها کرد، بدین سبب است که اغلب افراد و مدیران وبسایتها از وجود آن بیاطلاع هستند. با این حال باید بدانید که فعال نمودن HSTS سبب جلوگیری از حملات به پروتکل SSL و ربوده شدن کوکیها میشود. این دو مشکل از مهمترین نقاط ضعف و پاشنه آشیل وبسایتهایی است که قابلیت SSL خود را فعال نمودهاند ولی فاقد قابلیت HSTS هستند. به علاوه، افزون بر بالارفتن ضریب ایمنی، وجود HSTS با حذف یکی از مراحل پردازش بارگیری وبسایت، سبب افزایش سرعت بالا آمدن سایت خواهد شد!
انهدام SSL یا SSL Stripping چیست؟
اگر چه پروتکل HTTPS نسبت به HTTP یک پیشرفت عظیم بود ولی در هر حال این پروتکل امن نیز در مقابل هک شدن رویینتن نیست و هکرها میتوانند بر آن هم غلبه نمایند. بیدفاع شدن و انهدام SSL توسط یک حمله MITM، در وبسایتهایی که از فرایند ریدایرکت برای فرستادن کاربران از HTTP به نسخه HTTPS وبسایت استفاده میبرند، بسیار رایج است! ریدایرکت دائمی (301) و موقت (302) اساسا به این شکل کار میکند:
- یک کاربر آدرس google.com را در نوار آدرس مرورگر خود تایپ میکند.
- به صورت پیشفرض مرورگر تلاش میکند ابتدا آدرس http://google.com را بارگذاری نماید.
- مدیر سایت Google.com به طور دایمی (301) آن آدرس را به آدرس امن https://google.com هدایت کرده است.
- مرورگر دایرکت را یافته و این بار به جای آن آدرس https://google.com را بارگذاری مینماید.
ولی با استفاده از تاکتیک انهدام SSL، هکر میتواند از فرصت بدست آمده در بین مرحله 3 و 4 برای مسدود کردن فرمان دایرکت و متوقف کردن مرورگر به منظور بارگذاری نسخه امن HTTPS وبسایت استفاده نماید. در این شرایط همچنان به یک نسخه بدون رمزگذاری و ناامن دسترسی دارید و به سادگی تمام اطلاعات شما قابل سرقت خواهد بود. هکر حتی میتواند شما را به وبسایتی کاملا مشابه با سایت مورد نظر هدایت کرده و تمامی اطلاعاتی که شما وارد میکنید (از جمله شماره حساب بانکی و رمز اینترنتی آن و …) را بدست آورد بدون آنکه شما متوجه ناامن بودن سایت جعلی شوید!
البته گوگل قدمهایی برداشته است تا مرورگر کروم بتواند جلوی برخی از این ریدایرکتهای ناامن و تقلبی را بگیرد. با این حال مطمئنترین راه فعال کردن و استفاده از قابلیت HSTS برای تمام وبسایتهای مهم و حتی شخصی خودتان است.
چگونه HSTS میتواند جلوی انهدام SSL را بگیرد؟
فعال کردن HSTS مرورگر را مجبور میکند نسخه ایمن یک وبسایت را بارگیری نماید و هرگونه ریدایرکت و تماس دیگری را برای باز کردن اتصال HTTP نادیده بگیرد و مشکل آسیبپذیری فرایند ریدایرکت را که با هدایت کدهای 301 و 302 وجود دارد، برطرف کند. با این حال نکته ناخوشایند ماجرا در استفاده از HSTS این است که مرورگر مورد استفاده کاربر، باید حداقل یکبار قبل از به کارگیری همیشگی از این ویژگی، واکنش و فرمان HSTS را دیده باشد. این بدین معناست که حداقل یکبار باید وبسایت فرایند ریدایرکت HTTP به HTTPS را انجام دهد!
به همین علت حتی در وبسایتهای مجهز به HSTS نیز برای بار اولین این آسیبپذیری وجود دارد. برای مقابله با این تهدید بالقوه، مرورگر کروم لیستی از وبسایتهایی که دارای HSTS فعال هستند را در اختیار دارد و پیش از بارگذاری نسبت به اعمال این مورد اقدام مینماید. به علاوه کاربران حرفهای که دارای دانش فنی کافی در این زمینه هستند نیز خودشان میتوانند وبسایتهای مجهز به HSTS فعال را به این لیست بیافزایند.
این وبسایتهای افزوده شده در بهروزرسانیهای آینده کروم به صورت هاردکد به مرورگر افزوده خواهند شد. بدین صورت کاربران میتوانند اطمینان حاصل نمایند در نسخههای آتی کروم نیز لیست وبسایتهایی HSTS فعال، نیز بهروزرسانی میگردد و مرورگر امن باقی خواهد ماند. به علاوه باید خاطرنشان کرد که دیگر مرورگرها مانند فایرفاکس، سافاری، اپرا و اینترنت اکسپلورر نیز دارای لیستهای پیشبارگذاری HSTS هستند اما با استفاده از اطلاعات لیست تهیه شده توسط کروم، که در آدرس hstspreload.org در دسترس قرار دارد.
چگونه HSTS را بر روی وبسایت فعال کنیم؟
برای فعال کردن قابلیت HSTS در ابتدا شما باید دارای یک گواهینامه SSL معتبر باشید. اگر بدون آن شما HSTS را فعال نمایید، وبسایتتان از دسترس همه بازدیدکنندگان خارج خواهد شد. پس پیش از انجام هر کاری ابتدا نسبت به دارا بودن HTTPS برای وبسایت و تمام سابدامینهای آن اطمینان حاصل کنید. فعال کردن HSTS بسیار ساده است. شما تنها کاری که باید انجام دهید افزودن یک هدر به فایل .htaccess سایتتان است. هدری که شما باید به آن بیافزاید به شرح زیر است:
Strict-Transport-Security: max-age=31536000; includeSubDomains
این هدر یک کوکی با حداکثر تاریخ دسترسی یکساله به سایت و سابدامینهای آن اضافه خواهد کرد. هنگامی که یک مرورگر قصد اتصال به وبسایت را داشته باشد حداقل تا یک سال نمیتواند از نسخه ناامن HTTP به صورت ناخواسته، استفاده نماید. اطمینان حاصل کنید که تمام سابدامینها نیز تحت گواهینامه SSL هستند و سپس قابلیت HSTS را فعال کنید. دقت کنید اگر این کار را انجام ندهید بعد از ویرایش و ذخیره فایل .htaccess دیگر آنها در دسترس نخواهند بود!
در وبسایتهایی که گزینه includeSubDomains در آنها وجود ندارد یا فعال نشده است، مستعد نشت اطلاعات و دسترسی به حریم شخصی کاربران از طریق دستکاری شدن و سرقت کوکیها از سابدامینها هستند. ولی با فعال بودن includeSubDomains دیگر حملات مرتبط به کوکیها امکانپذیر نخواهد بود.
پیشنهاد میشود پیش از افزودن یکساله قابلیت HSTS به وبسایت، در ابتدا این حالت را به مدت 5 دقیقه فعال نمایید و مورد تست قرار دهید. برای این کار کافی است همانند کد پایین، عدد max-age را برابر 300 قرار دهید. حتی گوگل توصیه میکند در ابتدا حدود یک هفته تا یک ماه به صورت آزمایشی این کار را انجام داده و میزان ترافیک و عملکرد وبسایت را مورد بررسی قرار دهید. سپس به طور طولانی مدت اقدام به برقراری قابلیت HSTS نمایید. برای انجام این کار میتوانید از کدهای زیر استفاده نمایید.
برای پنج دقیقه: Strict-Transport-Security: max-age=300; includeSubDomains
برای یک هفته: Strict-Transport-Security: max-age=604800; includeSubDomains
برای یک ماه: Strict-Transport-Security: max-age=2592000; includeSubDomains
ساخت لیست پیشبارگذاری HSTS
در حال حاضر با کلیات قابلیت HSTS آشنا شدهاید و فواید و اهمیت استفاده از آن در وبسایتها را میدانید و همینطور بار نقطه ضعف و راهحل مقابله با آن آشنا شدهاید. ایمن نگه داشتن کاربران وبسایت یکی از کلیدیترین و مهمترین نکات مربوط به مدیریت وبسایت است. در این بین بعد از فعال نمودن HSTS، قرارگیری در لیست پیشبارگذاری وبسایتهای HSTS فعال مرورگر کروم و دیگر مرورگرها بسیار حایز اهمیت است. ولی برای این منظور وبسایت شما باید واجد شرایط زیر باشد:
- از یک گواهینامه SSL معتبر استفاده نماید.
- ریدایرکت از HTTP به HTTPS در همان هاست صورت بگیرد، اگر برای مثال شما از پورت 80 استفاده میکنید.
- تمام سابدامینهای شما نیز دارای پروتکل HTTPS باشند. به خصوص اگر سابدامین شما به صورت www.subdomain و دارای یک DNS ثبت شده باشد باید حتما از HTTPS پشتیبانی کند.
- یک هدر HSTS بر روی دامنه اصلی به منظور درخواست HTTPS به صورت زیر تنظیم شود:
- حداکثر مدت max-age یکسال و برابر 31536000 است.
- فرمان includeSubDomains باید کاملا مشخص شود.
- فرمان پیشبارگذاری باید مشخص شود.
- حتی اگر شما از ریدایرکت را از یک وبسایت HTTPS نیز انجام میدهید باز هم به جای صفحهای که بدان ریدایرکت میشود، نیازمند هدر HSTS هستید.
اگر میخواهید وبسایت خود را به لیست پیشبارگذاری HSTS اضافه کنید، مطمئن شوید که آیتمهای مورد نیاز برای پیشبارگذاری را فراهم کردهاید. گزینه Preload نشان میدهد که شما میخواهید وبسایتتان به لیست پیشبارگذاری HSTS کروم افزوده شود. هدر واکنش و پاسخ نیز باید به صورت زیر نوشته شود:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
به علاوه توصیه میکنیم که وبسایت خود را بعد از انجام این کار به وبسایت hstspreload.org نیز معرفی نمایید. ملزومات این اقدام نیز بسیار ساده است و به حفاظت از کاربران و بازدیدکنندگان وبسایت شما کمک شایانی مینماید. این نکته را نیز فراموش نکنید به صورت بالقوه این کار سبب بهبود رتبهبندی وبسایت شما در موتور جستجو خواهد شد.