HTTP Güvenlik Başlıkları, web uygulamalarının güvenliğini artırmak için kullanılabilecek basit ama etkili bir yöntemdir. HTTP Güvenlik Başlıkları, bir istemci (genellikle bir web tarayıcısı) ile bir sunucu arasında HTTP iletişiminin güvenlik ayrıntılarını belirtmek için değiş tokuş edilen HTTP başlıklarının bir alt kümesidir. Bu başlıklar, modern tarayıcıların kolayca önlenebilir güvenlik açıklarına maruz kalmalarını engelleyebilir. Bu makalede, HTTP Güvenlik Başlıklarının ne olduğunu, nasıl çalıştıklarını ve hangi başlıkları kullanmanız gerektiğini anlatacağız.
HTTP Güvenlik Başlıkları Nedir?
HTTP Güvenlik Başlıkları, sunucunun istemciye gönderdiği veya istemcinin sunucuya gönderdiği HTTP yanıtı veya isteği içinde yer alan metin tabanlı bilgi parçacıklarıdır. Bu başlıklar, iletişimin içeriği, boyutu, türü, önbellekleme politikası, izinleri ve diğer ayrıntıları hakkında bilgi taşır. Bazı başlıklar ise güvenlikle ilgilidir ve istemcinin veya sunucunun belirli güvenlik özelliklerini etkinleştirmesini veya devre dışı bırakmasını sağlar.
HTTP Güvenlik Başlıkları Nasıl Çalışır?
HTTP Güvenlik Başlıkları, sunucu tarafından ayarlanır ve istemciye gönderilir. İstemci (tarayıcı), bu başlıkları okur ve uygun şekilde davranır. Örneğin, X-Frame-Options başlığı, sunucunun sayfasının bir çerçeve veya iframe içinde gösterilip gösterilemeyeceğini belirtir. Tarayıcı, bu başlığı okur ve sayfayı çerçeve içinde göstermeye çalışan kötü amaçlı sitelere karşı korumak için buna uygun olarak hareket eder.
Hangi HTTP Güvenlik Başlıklarını Kullanmalısınız?
OWASP Secure Headers Project1, web uygulamalarının güvenliğini artırmak için kullanabileceğiniz HTTP Güvenlik Başlıklarını tanımlar ve önerir. Bu başlıklardan bazıları şunlardır:
X-Frame-Options
X-Frame-Options başlığı, bir web sayfasının başka bir web sitesinde bir iframe içinde nasıl görüntülenebileceğini kontrol etmek için kullanılan bir güvenlik özelliğidir. Temel amacı, kötü niyetli bir web sitesinin kullanıcıyı yanıltarak clickjacking saldırılarına yol açmasını engellemektir.
X-Frame-Options başlığı, “DENY,” “SAMEORIGIN” ve “ALLOW-FROM uri” gibi bileşenlere sahiptir:
DENY: “DENY” olarak ayarlandığında, web sayfasının herhangi başka bir web sitesinde bir iframe içinde görüntülenemeyeceğini belirtir. Bu en katı seçenek olup maksimum güvenlik sağlar.
SAMEORIGIN: “SAMEORIGIN” olarak ayarlandığında, web sayfasının bir iframe içinde görüntülenmesine izin verir, ancak yalnızca gömülü web sitesi aynı kökten geliyorsa (aynı etki alanı ve protokol). Bu daha hoşgörülü bir seçenektir, ancak yine de makul bir güvenlik sağlar.
ALLOW-FROM uri: Bu seçenek, web sayfasının bir iframe içine gömülebileceği belirli bir URI’yi (Uniform Resource Identifier) belirtmenize olanak tanır. Gömülmenin belirli bir kaynağa sınırlanmasını sağlar.
Örnek Başlık:
X-Frame-Options: DENY
X-Frame-Options başlığı, bir web sayfasının bir iframe içine gömülüp gömülenemeyeceğini belirleyerek clickjacking saldırılarına karşı koruma sağlar. Örnek başlıkta DENY, sayfanın hiçbir çerçevede gömülenemeyeceği anlamına gelir.
Strict-Transport-Security
Strict-Transport-Security (HSTS) başlığı, web sitelerinin kullanıcıları belirli türden siber saldırılardan korumak için kullandığı bir güvenlik özelliğidir. Temel amacı, web tarayıcılarının bir web sitesine yalnızca güvenli, şifrelenmiş bir bağlantı (HTTPS) kullanarak bağlanmasını zorunlu kılmaktır. Bu, saldırganların kullanıcı verilerini ele geçirmesini veya değiştirmesini engeller.
Strict-Transport-Security başlığı, birkaç bileşenden oluşur:
max-age: Tarayıcının web sitesi için yalnızca HTTPS kullanmasını hatırlaması gereken süreyi saniye cinsinden belirtir. Örneğin, “max-age=31536000” tarayıcının bu ayarı bir yıl boyunca hatırlayacağı anlamına gelir.
includeSubDomains: Bu kısım, tarayıcıya HSTS politikasını web sitesinin tüm alt alanlarına uygulamasını söyler. Örneğin, “includeSubDomains” tüm alt alanlar için geçerli demektir.
preload: Web siteleri HSTS ayarlarını tarayıcıların ön yükleme listesine eklemek için kullanabilirler. Bu, kullanıcının siteye ilk ziyaretinde bile güvende olmasını sağlar. Başlıkta “preload” bulunması, sitenin bu ön yükleme listesinin bir parçası olmayı kabul ettiğini gösterir.
Örnek başlık:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Strict-Transport-Security (HSTS) başlığı, tarayıcıya yalnızca güvenli (HTTPS) bir bağlantı kullanmasını söyler. Örneğin, bu örnek başlıktaki max-age, tarayıcının bu politikayı bir yıl boyunca hatırlayacağını belirtir. includeSubDomains, politikanın tüm alt alanlara uygulandığını ve preload, sitenin ön yükleme listesinin bir parçası olabileceğini gösterir.
X-Content-Type-Options
X-Content-Type-Options başlığı, web tarayıcılarının web uygulamalarının güvenliğini artırmak için uyguladığı bir güvenlik özelliğidir. Temel amacı belirli bir web zafiyetini önlemek olan MIME türü veya içerik türü adı verilen bir belirli güvenlik açığına karşı koruma sağlar.
X-Content-Type-Options başlığı, “nosniff” ve “none” gibi bileşenlere sahiptir:
nosniff: Bu önerilen ve yaygın olarak kullanılan bir değerdir. “nosniff” olarak ayarlandığında, tarayıcıya yanıtın Content-Type başlığında belirtilen içerik türünü sıkı bir şekilde takip etmesi talimatını verir. İçerik türü “text/html” olarak belirtildiyse, tarayıcı onu farklı bir MIME türü ile gönderse bile HTML olarak işler.
none: Bu değer, X-Content-Type-Options başlığını devre dışı bırakır. Tarayıcılara içerik türü saptama yeteneği tanır, bu da güvenlik açıklarına yol açabileceğinden dikkatli kullanılmalıdır.
Örnek Başlık:
X-Content-Type-Options: nosniff
X-Content-Type-Options başlığı, tarayıcıların sunucu tarafından belirtilenden farklı bir MIME türü olarak yorumlanan dosyaları önler. Bu örnek başlıkta nosniff, tarayıcının içerik türünü “sniff” yapmamasını ve belirtilen MIME türünü saygı göstermesini sağlar.
Content-Security-Policy (CSP)
Content-Security-Policy (CSP) başlığı, web sayfalarındaki kaynakların yüklenmesi ve yürütülmesi için kurallar belirlemek ve denetlemek için kullanılan bir güvenlik özelliğidir. Bu, kimin evinize girebileceğini ve içeride ne yapabileceğini belirlemek gibi bir şeydir. Bu başlık, web sitelerini ve ziyaretçilerini çeşitli siber saldırılara, özellikle cross-site scripting (XSS) ve veri enjeksiyonuna karşı korur.
Content-Security-Policy başlığı, “default-src,” “script-src,” “style-src,” “img-src,” “font-src,” “connect-src,” “frame-src,” ve “report-uri” veya “report-to” gibi bileşenleri içeren bir değere sahiptir.
Örnek Başlık:
Content-Security-Policy: default-src ‘self’; script-src ‘self’ cdn.example.com; img-src data:; upgrade-insecure-requests
Content-Security-Policy başlığı, bir web sayfasındaki kaynakların yüklenmesini ve yürütülmesini tanımlar ve çeşitli siber saldırıları önlemeye yardımcı olur. Bu örnek başlıkta, yalnızca aynı kökten gelen (kendi web siteniz) betiklerin yüklenmesine izin verir, görüntülerin veri URI’lerinden alınmasına izin verir ve güvensiz HTTP isteklerini otomatik olarak güvenli HTTPS isteklerine yükseltmeyi etkinleştirir.
Cache-Control
Cache-Control başlığı, web istemcileri (örneğin tarayıcılar) ve sunucular arasındaki HTTP iletişiminde önemli bir rol oynayan bir HTTP (Hypertext Transfer Protocol) bileşenidir. Bu başlık, web içeriğinin önbelleğe alınma, saklanma ve istemci ve aracı cihazlar (örneğin proxy sunucuları ve CD’ler) tarafından nasıl alınacağını kontrol eder.
Cache-Control başlığı, “public,” “private,” “max-age,” “no-store,” “no-cache,” “must-revalidate,” ve “s-maxage” gibi bileşenleri içeren bir değere sahiptir:
public: Yanıtın herhangi bir ara önbelleği (örneğin bir CDN veya proxy sunucusu) tarafından önbelleğe alınabileceğini gösterir. Birden çok kullanıcı arasında paylaşılan içerik için uygundur.
private: Yanıtın yalnızca tek bir kullanıcı için olduğunu ve ara önbellekler tarafından önbelleğe alınmaması gerektiğini belirtir. Hassas veya kişiselleştirilmiş içerikler için sıkça kullanılır.
max-age: Bu değer, yanıtın bir metni önbelleğe almadan önce ne kadar süre boyunca geçerli olduğunu tanımlar. Örneğin, “max-age=3600” yanıtın bir saat boyunca önbelleğe alınabileceği anlamına gelir.
no-store: İstemciye ve aracılara yanıtın önbelleğe alınmamasını ve her zaman sunucudan alınması gerektiğini belirtir. Bu, son derece hassas veriler için kullanılır.
no-cache: İstemciye yanıtın önbelleğe alınmadan önce sunucu tarafından doğrulanması gerektiğini belirtir, süresi dolmamış olsa bile. Önbelleğe alınan içeriğin hala güncel olduğundan emin olur.
must-revalidate: Bu yönerge, önbelleğe alınan içeriğin süresine bakılmaksızın kullanılmadan önce sunucu tarafından yeniden doğrulanması gerektiğini gösterir.
s-maxage: “max-age” gibi çalışır, ancak özel önbellekler (proxy ve CD gibi) için geçerlidir. Paylaşılan önbelleklerde önbelleğe alınmış içeriğin maksimum ömrünü belirler.
Örnek Başlık:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Cache-Control başlığı, tarayıcıların ve aracı önbelleklerin önbellekleme davranışını kontrol eder. Bu örnek başlıkta, tarayıcıları ve önbellekleri yanıtı saklamamaları ve her zaman sunucudan alarak yeniden doğrulamaları yönünde yönlendirir, ayrıca maksimum ömrü 0 saniye olarak ayarlar, bu da önbellekleme işleminin etkisiz hale getirilmesini sağlar.
Referrer-Policy
Referrer-Policy başlığı, web tarayıcılarının bir kullanıcının bir bağlantıya tıkladığında veya yeni bir sayfaya gezindiğinde önceki web etkinliği hakkında ne kadar bilgi paylaşması gerektiğini kontrol etmek için kullanılan bir güvenlik özelliğidir. Bu başlık, web site sahiplerinin hedef web sitesine ne kadar referrer bilgisi aktarılması gerektiğini belirtmelerine yardımcı olarak kullanıcı gizliliğini ve güvenliği korur.
Referrer-Policy başlığı, “no-referrer,” “no-referrer-when-downgrade,” “same-origin,” “origin,” “strict-origin,” “origin-when-cross-origin,” “strict-origin-when-cross-origin,” ve “unsafe-url” gibi bileşenlere sahiptir.
Örnek Başlık:
Referrer-Policy: strict-origin-when-cross-origin
Bu örnek başlıkta, web sitesi, tarayıcıya bir farklı kökten (yani farklı bir web sitesine) gezinirken yalnızca tam referrer bilgisini içermesini söylüyor. Aynı web sitesi içinde geziniyorsanız (aynı kök), referrer URL’nin yalnızca kök bölümünü paylaşır. Bu ayar, gizlilik ve işlevselliği dengelemeye yardımcı olur.