.htaccess Header Ayarları ile Site Güvenliği

Okuma Süresi:6 Dakika, 31 Saniye
htaccess logo - htaccess başlık - htaccess header

htaccess Header Ayarları Hakkında Kısa Bir Yazı

Web sitesi olan herkesin bilmesi gereken şeylerden biri .htaccess dosyasıdır.

Apache server sistemleri .htaccess dosyasını kullanır. Bu dosya klasör bazlı oluşturulacağı gibi genel olarak site bazlıda oluşturulabilir. Her klasör kendi htaccess header ayarlarına göre yanıt gönderir.

Bu yazımızda genel olarak Güvenlik Başlıklarını (Security Header) .htaccess içerisine gömerek sitenin http header ile güvenliği arttırmanın yollarını anlatacağız.

Apache server sistemi ile çalışmaktadır. Apache sistemi C programlama dili ile yazılmış http sunucu sistemidir. Bu nedenle .htaccess header içerisinde de HTML, C ve modülleri XML formatına uygun olarak çağırılmaktadır.

Güvenlik yanıtı üstbilgileri nelerdir?

‘HTTP Security Response Headers’, bir sunucunun web tarayıcılarına ek güvenlik bilgileri göndermesine ve web tarayıcılarının ve ziyaretçilerin web uygulamanızla nasıl etkileşime girebileceğini yönetmesine izin verir.

Uygun Güvenlik Başlığı Yanıt ilkelerine sahip olmak, kod yerleştirme, siteler arası komut dosyası çalıştırma saldırıları ve tıklama hırsızlığı gibi yaygın saldırıları durdurabilecek başka bir koruma düzeyi ekler . WordPress ve Apache sunucularını kullanan ana bilgisayarlar gibi çoğu CMS sitesi için bu header Yanıtı ilkeleri .htaccess dosyası aracılığıyla ayarlanabilir.

.htaccess (Hypertext Access, Türkçe: Zengin metin erişimiApache başta olmak üzere çoğu ağ sunucusu tarafından kullanılan web alanı üzerinde ayar değişimleri yapılmasını sağlayan dosyadır.

https://tr.wikipedia.org/wiki/Htaccess

X Frame Options Başlığı

‘X Frame Options’ Güvenlik başlık uygulamasının daha kolay politikalarından biridir. Web sitenizin <iframes>, <frame> or <object> etiketlerde gösterilmesini engelleyerek tıklama koruması sağlar .

Aşağıdaki kodu .htaccess dosyanızın en üstüne ekleyerek sitenize ‘X Frame Options’ yanıt başlığını eklersiniz ve sitenizin yalnızca kendi alan adınızla çerçevelenmesine izin verirsiniz.

<IfModule mod_headers.c> 
     Header set X-Frame-Options "sameorigin"
 
</IfModule>

X XSS Protection Başlığı

‘ X XSS Protection Header’ uygulayarak bir dereceye kadar ‘siteler arası komut dosyası çalıştırma’ (XSS) saldırılarını önleyebilirsiniz. Github, Facebook ve Google gibi tüm büyük siteler tarafından uygulanması ve yaygın olarak kullanılması için başka bir kolay güvenlik başlığıdır.

Aşağıdaki htaccess kodu parçacığı, XSS filtresini etkinleştirecek ve sitenize başka bir güvenlik katmanı ekleyecektir:

<IfModule mod_headers.c>
     Header set X-XSS-Protection "1; mode=block"
</IfModule>

X Content Type Options Güvenlik Başlığı

‘ X Content Type Options ‘ yanıt başlığı, web tarayıcılarına MIME ve içerik koklamayı devre dışı bırakmalarını söyler. Bu, ‘MIME karışıklık saldırıları’ gibi saldırıları önler. Sitenizin “arabadan indirme” saldırılarına maruz kalmasını azaltacak ve sunucunuzun akıllı adlandırma ile gizlenmiş kötü amaçlı içerik yüklemesini önleyecektir.

Bu güvenlik başlığını sitenize eklemek için aşağıdaki kodu htaccess dosyanıza eklemeniz yeterlidir:

<IfModule mod_headers.c>
     Header set X-Content-Type-Options "nosniff"
</IfModule>

X Permitted Cross Domain Policies Başlığı

Bu politika, sitenizdeki PDF’ler ve Flash gibi Adobe kaynaklarının kötüye kullanılmasını önler. 

Aşağıdaki htaccess snippet’ini ekleyerek, bağlantı kurmayı önleyecek ve sitenizin varlıklarını yüklemeye çalışan diğer sitelerden kaynak kötüye kullanımını durduracaksınız.

<IfModule mod_headers.c>
     Header set X-Permitted-Cross-Domain-Policies "none"
</IfModule>

Strict Transport Security Başlığı

Sıkı taşıma güvenliği güvenlik başlığı, web tarayıcısını tüm iletişimin güvenli bir HTTPS bağlantısı üzerinden gönderilmesini sağlamaya zorlar.

Siteniz karma içerik sunuyorsa, bunu uygulamak sitenizi bozar. Bunu .htaccess dosyanıza eklemeden önce tüm URL’lerin https olarak sunulduğundan emin olun.

<IfModule mod_headers.c>
     Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

Content Security Policy Başlığı

Bir ‘Content Security Policy’ başlık yanıtı, kod yerleştirme ve XSS saldırıları gibi çok çeşitli saldırıları önler. Ne yazık ki, aynı zamanda uygulanması en zor politikalardan biridir ve yanlış uygulanırsa sitenizin görünümünü bozma potansiyeli en yüksek olanıdır . Kısacası, kapsamlı testler yapmadan bu politikayı htaccess dosyanıza uygulamanın kolay bir yolu yoktur.

‘Content Security Policy’, sitenizle hangi ana bilgisayar URL’lerinin (alan adlarının) etkileşime girmesine izin verildiğini kontrol eder. 

Bu nedenle, site eklentileriniz veya uzantılarınız içinde bulunan her 3. taraf URL’nin İçerik Güvenliği Politikanıza eklenmesi ve ardından bunlara karşı uygun kuralların uygulanması gerekir.

İlk adım, sitenizin kaynak kodundaki tüm harici URL’leri belgelemektir, ardından her bir harici URL ile ilgili politikalar oluşturmak için bir CSP oluşturucu kullanabilirsiniz. Burada harika bir içerik güvenliği üreticisi var: https://report-uri.com/home/generate

Bunu zorlaştıran şey, kaynak kodunda mutlaka göremediğiniz JavaScript işlevlerinde siteniz tarafından kullanılan harici URL’lerin olmasıdır. Örneğin, analiz, sitenize kaynak kodunda kolayca göremediğiniz 5 farklı harici URL ekleyebilir.

Tüm harici URL’lerin https protokolünü kullanmasını zorunlu kılan aşağıdaki kodu kullanarak çok ilkel bir ‘İçerik Güvenliği Politikası’ sunmak hala mümkündür. Bu, hiçbir politikaya sahip olmamaktan daha iyidir ve tüm satır içi JavaScript ve CSS’nin de çalışmasına izin verir.

<IfModule mod_headers.c>
      Header set Content-Security-Policy "default-src * data:; script-src https: 'unsafe-inline' 'unsafe-eval'; style-src https: 'unsafe-inline'"
</IfModule>

Referrer Policy Başlığı

‘Referrer Policy’ başlığı, sitenizde bir bağlantı tıklandığında bir sonraki siteye hangi bilgilerin aktarılacağını kontrol eder. Amacı, kimlik avı saldırılarında kullanılan ‘Ters TabNapping’i önlemektir.

Bir dış bağlantı, target= “_blank” değer değerine sahipse, ‘window.opener object’ aracılığıyla yönlendiren sayfaya kısmi erişim sağlar. Yönlendirme Politikası, ‘window.opener object’ erişimi kısıtlayarak kimlik avı saldırılarını önlemeye yardımcı olur.

Doğru ‘Yönlendirme Politikası’nı ayarlarken birkaç seçenek vardır ve siteniz bağlı kuruluş bağlantılarıyla ilgileniyorsa çok katı bir politika belirlememeye dikkat etmeniz gerekir. Aşağıdaki 3 bağlantı, farklı ‘Yönlendirme Politikası’ seçenekleri hakkında daha fazla bilgi edinmek için harika kaynaklardır:

Sonuç olarak, ‘Referrer Policy ‘ seçeneklerinizin ne kadar kısıtlayıcı olmasını istediğiniz size kalmış. Aşağıdaki seçenek, sitelerimin çoğu için kullandığım seçenektir:

<IfModule mod_headers.c>
     Header set Referrer-Policy "no-referrer-when-downgrade"
</IfModule>

Feature Policy Başlığı

‘Feature Policy’ güvenlik başlığı, kullanıcılar sitenizdeyken veya herhangi bir iframe üzerinden sitenizi görüntülerken web tarayıcısının hangi özellikleri kullanabileceğini kontrol eder. Coğrafi konum, mikrofonlar ve kameralar gibi web tarayıcılarının kullandığı uzun bir özellikler listesi vardır. ‘Feature Policy’, bu özelliklerden hangilerinin sitenizde kullanılabileceğini ve hangi kaynak URL’lerin bunları kontrol etmesine izin verildiğini kontrol eder.

Kapsamlı bir uygulama kılavuzu için şu Google makalesine başvurabilirsiniz: https://developers.google.com/web/updates/2018/06/feature-policy – Sitelerimin çoğu için aşağıdakileri yapan bu basit politikayı kullanıyorum:

  • Sitelerimde kamerayı/Web Kamerasını tamamen devre dışı bırak
  • Herhangi bir URL’den coğrafi konum belirlemeye izin verir (coğrafi konum *)
  • Mikrofonun yalnızca benim sitemden etkinleştirilmesine izin veriyor
<IfModule mod_headers.c>
     Header set Feature-Policy "camera 'none'; fullscreen 'self'; geolocation *; microphone 'self' https://www.example/*"
</IfModule>

Expect CT Başlığı

Expect CT politikası, web tarayıcılarına Sertifika Şeffaflığı gereksinimlerini bildirmeleri veya zorlamaları talimatını verir. Bu, eksik verilen SSL sertifikalarını durdurabilir ve rapor moduna veya zorlama moduna ayarlanabilir.

‘Beklenen CT’ Olmadan Saldırganların eksik verilen sertifikaları kullanması çok daha kolaydır. Zorlama moduna ayarlayacaksanız, SSL’nizle her şeyin doğru şekilde yapılandırıldığından emin olmak için kesinlikle dikkatli olmanız gerekir. Sitelerimin çoğunda aşağıdaki örneğe göre tam zorlama modunu kullanıyorum:

<IfModule mod_headers.c>
      Header set Expect-CT: enforce, max-age=31536000, report-uri="https://your.report-uri.com/r/d/ct/enforce"
</IfModule>

Ayrıca yalnızca rapor modunu şu şekilde kullanabilirsiniz:

<IfModule mod_headers.c>
      Header set Expect-CT: max-age=31536000, report-uri="https://your.report-uri.com/r/d/ct/report"
</IfModule>

Tüm .htaccess Başlıkları

Yukarıda verilen başlıkların bir araya getirilmiş şekli:



<IfModule mod_headers.c>
<if "%{HTTPS} == 'on'">
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
    </if>
    Header always set Content-Security-Policy "upgrade-insecure-requests"
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-XSS-Protection "1; mode=block"
    Header always append X-Frame-Options SAMEORIGIN
    Header always set Expect-CT "max-age=7776000, enforce"
    Header always set Referrer-Policy: "no-referrer-when-downgrade"
    Header always set X-Permitted-Cross-Domain-Policies "none"
    Header always set Permissions-Policy "geolocation=(), midi=(),sync-xhr=(),accelerometer=(), gyroscope=(), magnetometer=(), camera=(), fullscreen=(self)"
</IfModule>

Yukarıda kodda <if></if> farklılığı gözünüze çarpmış olabilir. Bu komutu HTTP yani SSL olmayan bağlantı için kullanıyorum. Çünkü HTTP döndüren başlıkta HTTPS başlığı döndürmek hata olacaktır. Sitenizde 301 yönlendirme olsa da başlıklarda hatalı gönderime neden olacaktır. Bu nedenle Sadece Transport başlığında if koşulu ile SSL kontrolu sağlanması yararlı olacaktır.

Happy
Happy
82 %
Sad
Sad
0 %
Excited
Excited
9 %
Sleepy
Sleepy
0 %
Angry
Angry
0 %
Surprise
Surprise
9 %

You may also like...