(HSTS) HTTP Strict Transport Security

Havalimanı, kafeteryalar veya alışveriş merkezleri gibi halka açık alanlarda ücretsiz wi-fi hizmetlerini kullanıyoruz. Bu gibi yerlerde wi-fi şifrelerinin kağıtlara yazılıp elden ele gezdiğine veya panolara yazıldığına şahit olmuşuzdur. Diğer tüm kullanıcılar gibi kötü niyetli hackerlar da bu ortak ağlara kolaylıkla bağlanabilir, HTTP trafiğini izleyebilir ve gizli verilerinizi kolaylıkla elde edebilirler.

Bu tarz açıklara karşı web sitemizi sertifikalandırdıktan sonra Redirection ile HTTP isteklerini HTTPS protokolüne yönlendiririz. Peki bu yeterli mi?

Genelde erişmek istediğimiz bir web sitesine giderken protokol belirtmeyiz. Yani tarayıcımızın adres çubuğuna “https://www.onurdanir.com” yerine “onurdanir.com” şeklinde yazarız. Bu durumda tarayıcı http protokolünü kullanmak istediğinizi varsayar ve “onurdanir.com” adresine http isteğinde bulunur.  Sunucu ise HTTPS adresine yönlendiren (301 Moved Permanently) bir yanıt gönderir.

Kullanılan bu yöntemde, özellikle yukarıda belirtildiği gibi halka açık wi-fi alanlarında kötü niyetli hackerlar tarafından Protocol Downgrading, Session Hijacking ve MITM (man-in-the-middle) gibi saldırılara maruz kalmamız mümkün.

HSTS (HTTP Strict Transport Security) nedir ve nasıl çalışır?

HTTP Strict Transport Security, 2012 yılında bir web güvenlik standardı olarak tanımlandı. Bu standardı oluşturmanın birincil amacı, SSL stripping kullanan MITM saldırılarından kaçınmaya yardımcı olmaktı. SSL stripping, bir saldırganın, paketleri koklayabilmeleri (Sniffing Attack) ve hassas bilgileri ele geçirebilmeleri veya değiştirebilmeleri için tarayıcıyı HTTP kullanarak bir siteye bağlanmaya zorladığı bir teknik.

HSTS, web sitesine yalnızca güvenli bir bağlantı (HTTPS) kullanılarak erişilmesi gerektiğini bildirir. HTTP bağlantısına kesinlikle izin vermez ve HTTPS mevcut değil ise bağlantıyı sonlandırır. Bazı geçersiz sertifika durumlarında (süresi dolmuş, kendinden imzalı, bilinmeyen CA vs.) kullanıcı bu uyarıyı görmezden gelip erişime devam edebiliyor. HSTS tanımlı sitelerde ise sertifika uyarılarının atlanmasına kesinlikle izin verilmez.

Web sitesi HSTS yayınladıktan sonra aşağıdaki görselde olduğu gibi yönlendirme işlemi sunucudan önce tarayıcı tarafında gerçekleştirilir.

Destekleyen Tarayıcılar

Aşağıda belirtildiği gibi birçok tarayıcı versiyonu HSTS desteklemektedir.

SEO Açısından Faydaları

HSTS aktif olan bir sitede yönlendirmeler arasında geçen zamandan tasarruf edilerek performans anlamında pozitif etkisi olmaktadır. Bu hem açılış sayfalarınızın hızını etkileyecek hem de SEO puanınızı pozitif etkileyecektir.

HSTS Etkinleştirme

Farklı web sunucularınızda aşağıdaki şekilde HSTS etkinleştirebilirsiniz.

“max-age=31536000;” (1 yıl süre ile yapılan her bağlantı HTTPS olmalıdır)
“includeSubDomains;” (alan adı ile birlikte tüm alt alan adlarını dahil et)

Apache Server

.htaccess dosyasına ekleyin

# Use HTTP Strict Transport Security to force client to use secure connections only
Header always set Strict-Transport-Security "max-age=300; includeSubDomains; preload"

Nginx Server

site.conf dosyasına ekleyin

add_header Strict-Transport-Security 'max-age=300; includeSubDomains; preload; always;'

Lighttpd Server

Yapılandırma dosyasına ekleyin ( /etc/lighttpd/lighttpd.conf)

server.modules += ( "mod_setenv" ) $HTTP["scheme"] == "https" { setenv.add-response-header = ("Strict-Transport-Security" => "max-age=300; includeSubDomains; preload") }

IIS Server

system.webServer dosyasına ekleyin

  <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="HTTP to HTTPS redirect" stopProcessing="true">
              <match url="(.*)" />
              <conditions>
                <add input="{HTTPS}" pattern="off" ignoreCase="true" />
              </conditions>
              <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" />
             </rule>
           </rules>
           <outboundRules>
             <rule name="Add Strict-Transport-Security when HTTPS" enabled="true">
               <match serverVariable="RESPONSE_Strict_Transport_Security" pattern=".*" />
               <conditions>
                 <add input="{HTTPS}" pattern="on" ignoreCase="true" />
               </conditions>
               <action type="Rewrite" value="max-age=31536000; includeSubDomains; preload" />
             </rule>
           </outboundRules>
         </rewrite>
       </system.webServer>
     </configuration>

Web Siteniz Ne Durumda

Web sitenizde HSTS etkin olup olmadığını veya etkinleştirme sonrası test etmek için tarayıcınızda sırası ile aşağıdaki adımları izleyerek kontrol edebilirsiniz.

F12 => Network => Name => Headers => Response Headers => strict-transport-security:

Alternatif olarak https://www.ssllabs.com/ssltest/index.html adresinden de detaylı tarama yaparak HSTS kontrolü yapabilirsiniz.

About the Author

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir