Teme: URL rewriting | Web razvoj

HTTPS i HTTP Strict Transport Security (HSTS)

Skraćena veza: https://pedja.supurovic.net/veza/9166

Od nedavno su vlasnici i administratori sajtova prinuđeni da sajtove prebacuju na HTTPS protokol zbog pretnji Gugla (Google) i Hroma (Chrome)  da će da kažnjavaju sajtove koji nisu na šifrovanom protokolu.

Kada na server instalirate sertifikat i podesite HTTPS protokol tako da je sajt normalno vidljiv i kada se na njega dođe korišćenjem ovog sigurnosnog protokola, neophodno je da server podesite tako da korisnike koji dođu preko običnog HTTP preusmerite na HTTPS.

Zavisno od samog sajta, i servera na kome se nalazi, ovo se može obezbediti na više načina. Najuobičajeniji je da se u .htaccess podesi redirekcija koja sav pristup preusmerava na HTTPS.

To se podešava ovako:

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

Nakon što ovako podesite server, svaki korisnik koji dođe na sajt preko starog linka koji nije HTTP, server će veb čitaču poslati instrukciju da ponovo učita stranicu ali preko HTTP protokola. Ovim ste uveli obaveznost pristupa preko zaštićenog protokola.

Međutim, niste sasvim isključili potencijalne bezbednosne probleme.

Naime, iako korisnik zaista završi na sajtu koristeći zaštićeni protokol, on ipak svaki put kada sajtu pristupa navodeći nezaštićen protokol prvi pristup napravi bez te zaštite a tek tada ga sajt preusmeri na zaštićenu vezu.

Ovo ostavlja prostora da neko zlonameran ipak uskoči u vezu dok nije zaštićena, vidi podatke, pa čak i da se lažno predstavi kao vaš sajt, ili preusmeri korisnika na neki sasvim drugi sajt ili pokrene neku zlonamernu proceduru na štetu vašeg posetioca.

Postoji način da i ovo predupredite, koristeći HTTP Strict Transport Security komandu u HTTP zaglavlju koje se šalje veb čitaču. Ovu komandu možete takođe podesiti u .htaccess i to tako što na sam početak datoteke dodate liniju koja glasi:

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

ili

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

Ova komanda nalaže veb čitaču da ubuduće (u ovom slučaju celu sledeću godinu – 31536000 sekundi) datom sajtu pristupa isključivo preko HTTPS protokola, čak i ako je link preko koga se pristupa naveden bez HTTPS.

Ako je dodat parametar includeSubdomains to naznačava da se komanda odnosi i na sve poddomene.

Veb čitač će ovu komandu zapamtiti i zaista, dok ne istekne njeno trajanje, kako god da korisnik tog veb čitača pokuša da pristupi vašem sajtu (klikom na neki link, iz bukmarka, ukucavanjem ili na neki drugi način), sam čitač će obavezno koristiti HTTPS protokol.

Ovo je veoma zgodno, jer, s obzirom da je do sada HTTPS upotrebljavan vrlo retko, većina linkova ka sajtovima nema naveden HTTPS protokol i teško da će iko uspeti da sve svoje linkove zameni tako da umesto HTTP stavi HTTPS. Umesto zamene linkova, lakše je na svom sajtu ostaviti instrukciju veb čitačima da obavezno koriste HTTPS protokol.

Ovaj pristup ima i mane. Ako ste podesili Strict-Transport-Security na na primer, godinu dana, to znači da će svaki veb čitač koji je pristupio vašem sajtu, celu narednu godinu dana pristupati sajtu isključivo preko HTTPS protokola. Ako se desi da iz nekog razloga morate da isključite HTTPS protokol, vaš sajt će takvim veb čitačima postati nedostupan jer oni ni u kom slučaju neće sajtu pristupiti bez HTTPS. Izgleda da vam se tako nešto desi su prilično mali, mada nisu neverovatni.

Napomena

HTTP Strict Transport Security ne uključuje redirekciju na vašem sajtu. Ova komanda počinje da deluje tek kada veb čitač pristupi saju preko HTTPS i tada dobije ovu komandu.

Ako posetilac na sajt dođe preko HTTP protokola i nije preusmeren na HTTPS, komanda HTTP Strict Transport Security neće delovati.

Obavezno je da u .htaccess uz HTTP Strict Transport Security komandu stavite i komande za redirekciju sa HTTP na HTTPS, da bi to imalo efekta.

Sve ovo ostavlja i dalje malu nesigurnost, jer kada koristnik prvi put dođe na vaš sajt bez HTTPS protokola, one je u tom momentu ipak izložen zlonamernom napadu. Vaš sajt će ga odmah prebaciti na HTTPS i ubuduće će pristzup biti bezbedan ali u tom prvomo momentu, kada korsinik ristupa prvi put, on je izložen.

Ovo se može rešiti upotrebom HTTP Strict Transport Security Preloading servisa. Vaš sajt možete prijaviti na https://hstspreload.org/. To je HTTP Strict Transport Security Preloading lista, odnosno spisak sajtova koji imaju uključen SSL protokol i bezbedni pristup. VEb čitači preuzimaju ovu listu i ako je vaš sajt u njoj, čak ni prvi put neće pokušati pristup na nebezbedan način jer će snati da je bezbedni pristup već omogućen. Time se isključuje i onaj prvi pristup koji je nebezbedan.

Nažalost i HTTP Strict Transport Security Preloading ima mane.

Prvo, da biste mogli da stavite sajt na HTTP Strict Transport Security Preloading listu, morate već da iamte uključen HTTP Strict Transport Security na sajtu, on mora biti podešen da traje najmanje jednu godinu, i mora biti podešen tako da važi kako za osnovni tako i za sve poddomene. Ako imate neke poddomene za koje ne želite da koriste HTTPS, onda ne možete staviti sajt na HTTP Strict Transport Security Preloading listu.

Drugi, veći problem je, da kada jednom stavite sajt na HTTP Strict Transport Security Preloading listu, uklanjanje sajta sa te liste je znatno komplikovanije i sporije.

4 comments to HTTPS i 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.

    • Namerno sam preskočio taj deo jer je previše šareno i zavisi od hosting servera.

      Jedino što mogu da preporučim je da se treba obratiti adminsitratoru hosta i tražiti Let’s Encrypt sertifikat. To je besplatno i sasvim dobro i praktično rešenje.

  • 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 🙂

    • Host koji omogućava Let’s Encrypt porpavilu omogućava i automatsko osvežavanje sertifikata tako da taj deo ugalvnom nije problem.

      A hostove koji ne rade sa Let’s Encrypt prosto zaobiđi.

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>

Popunite izraz tako da bude tačan: *