Теме: URL rewriting | Web развој

HTTPS и HTTP Strict Transport Security (HSTS)

Скраћена веза: https://pedja.supurovic.net/veza/9166

Од недавно су власници и администратори сајтова принуђени да сајтове пребацују на HTTPS протокол због претњи Гугла (Google) и Хрома (Chrome)  да ће да кажњавају сајтове који нису на шифрованом протоколу.

Када на сервер инсталирате сертификат и подесите HTTPS протокол тако да је сајт нормално видљив и када се на њега дође коришћењем овог сигурносног протокола, неопходно је да сервер подесите тако да кориснике који дођу преко обичног HTTP преусмерите на HTTPS.

Зависно од самог сајта, и сервера на коме се налази, ово се може обезбедити на више начина. Најуобичајенији је да се у .htaccess подеси редирекција која сав приступ преусмерава на HTTPS.

То се подешава овако:

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

Након што овако подесите сервер, сваки корисник који дође на сајт преко старог линка који није HTTP, сервер ће веб читачу послати инструкцију да поново учита страницу али преко HTTP протокола. Овим сте увели обавезност приступа преко заштићеног протокола.

Међутим, нисте сасвим искључили потенцијалне безбедносне проблеме.

Наиме, иако корисник заиста заврши на сајту користећи заштићени протокол, он ипак сваки пут када сајту приступа наводећи незаштићен протокол први приступ направи без те заштите а тек тада га сајт преусмери на заштићену везу.

Ово оставља простора да неко злонамеран ипак ускочи у везу док није заштићена, види податке, па чак и да се лажно представи као ваш сајт, или преусмери корисника на неки сасвим други сајт или покрене неку злонамерну процедуру на штету вашег посетиоца.

Постоји начин да и ово предупредите, користећи HTTP Strict Transport Security команду у HTTP заглављу које се шаље веб читачу. Ову команду можете такође подесити у .htaccess и то тако што на сам почетак датотеке додате линију која гласи:

Header always set Strict-Transport-Security 
     "max-age=31536000;"

или

Header always set Strict-Transport-Security 
     "max-age=31536000; includeSubdomains;"

Ова команда налаже веб читачу да убудуће (у овом случају целу следећу годину – 31536000 секунди) датом сајту приступа искључиво преко HTTPS протокола, чак и ако је линк преко кога се приступа наведен без HTTPS.

Ако је додат параметар includeSubdomains то назначава да се команда односи и на све поддомене.

Веб читач ће ову команду запамтити и заиста, док не истекне њено трајање, како год да корисник тог веб читача покуша да приступи вашем сајту (кликом на неки линк, из букмарка, укуцавањем или на неки други начин), сам читач ће обавезно користити HTTPS протокол.

Ово је веома згодно, јер, с обзиром да је до сада HTTPS употребљаван врло ретко, већина линкова ка сајтовима нема наведен HTTPS протокол и тешко да ће ико успети да све својe линкоvе замени тако да умeсто HTTP стави HTTPS. Уместо замене линкова, лакше је на свом сајту оставити инструкцију веб читачима да обавезно користе HTTPS протокол.

Овај приступ има и мане. Ако сте подесили Strict-Transport-Security на на пример, годину дана, то значи да ће сваки веб читач који је приступио вашем сајту, целу наредну годину дана приступати сајту искључиво преко HTTPS протокола. Ако се деси да из неког разлога морате да искључите HTTPS протокол, ваш сајт ће таквим веб читачима постати недоступан јер они ни у ком случају неће сајту приступити без HTTPS. Изгледа да вам се тако нешто деси су прилично мали, мада нису невероватни.

Напомена

HTTP Strict Transport Security не укључује редирекцију на вашем сајту. Ова команда почиње да делује тек када веб читач приступи сају преко HTTPS и тада добије ову команду.

Ако посетилац на сајт дође преко HTTP протокола и није преусмерен на HTTPS, команда HTTP Strict Transport Security неће деловати.

Обавезно је да у .htaccess уз HTTP Strict Transport Security команду ставите и команде за редирекцију са HTTP на HTTPS, да би то имало ефекта.

Све ово оставља и даље малу несигурност, јер када користник први пут дође на ваш сајт без HTTPS протокола, оне је у том моменту ипак изложен злонамерном нападу. Ваш сајт ће га одмах пребацити на HTTPS и убудуће ће пристзуп бити безбедан али у том првомо моменту, када корсиник риступа први пут, он је изложен.

Ово се може решити употребом HTTP Strict Transport Security Preloading сервиса. Ваш сајт можете пријавити на https://hstspreload.org/. То је HTTP Strict Transport Security Preloading листа, односно списак сајтова који имају укључен SSL протокол и безбедни приступ. ВЕб читачи преузимају ову листу и ако је ваш сајт у њој, чак ни први пут неће покушати приступ на небезбедан начин јер ће снати да је безбедни приступ већ омогућен. Тиме се искључује и онај први приступ који је небезбедан.

Нажалост и HTTP Strict Transport Security Preloading има мане.

Прво, да бисте могли да ставите сајт на HTTP Strict Transport Security Preloading листу, морате већ да иамте укључен HTTP Strict Transport Security на сајту, он мора бити подешен да траје најмање једну годину, и мора бити подешен тако да важи како за основни тако и за све поддомене. Ако имате неке поддомене за које не желите да користе HTTPS, онда не можете ставити сајт на HTTP Strict Transport Security Preloading листу.

Други, већи проблем је, да када једном ставите сајт на HTTP Strict Transport Security Preloading листу, уклањање сајта са те листе је знатно компликованије и спорије.

4 comments to HTTPS и HTTP Strict Transport Security (HSTS)

  • Amadeus

    Dobar tekst Pedja!
    Ali da je smo do redirekcije preko .htaccessa to je namjanji problem.
    Mozda nije lose da objavis neki clanak o smom SSL i sarolikosti njegove primene na raznim hosting platformama.
    Zasto se negde naplacuje, negde ne, neki tips and tricks za instalaciju.
    Ponuda SSL protokola i odziv hosting kompanija je skroz razlicita ali izgleda da je uzelo maha. Svaki tekst u ovom momentu na datu temu je koristan.

    • Намерно сам прескочио тај део јер је превише шарено и зависи од хостинг сервера.

      Једино што могу да препоручим је да се треба обратити админситратору хоста и тражити Let’s Encrypt сертификат. То је бесплатно и сасвим добро и практично решење.

  • Amadeus

    Da, bas zato sam i pitao, tema jeste siroka i ima dosta nekih resenja, nesto nude hostinzi, nesto se samostalno moze instalirati, Let’s Encrypt je popularan i podrzan na dosta platformi ali neke ne dozvoljavaju njegovu implementaciju jos uvek, mislim da negde videh i da svaka 3 meseca treba da se reaktivira, barem takav fedback je bio od host operatera…
    U svakom slucaju i .htaccess tips and tricks koji si opisao je od koristi 🙂

    • Хост који омогућава Let’s Encrypt порпавилу омогућава и аутоматско освежавање сертификата тако да тај део угалвном није проблем.

      А хостове који не раде са Let’s Encrypt просто заобиђи.

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Попуните израз тако да буде тачан: *