Kurumsal web sitelerinde Content Security Policy (CSP), HTTP Strict Transport Security (HSTS) ve A+ SSL sertifikası yapılandırma güvenlik rehberi. Detaylı bi...
Hızlı Özet (TL;DR)
Bir web sitesinin siber güvenliği sadece adres çubuğundaki yeşil kilit simgesinden (SSL/TLS sertifikasından) ibaret değildir. Ücretsiz veya ücretli bir SSL sertifikası kurmak yalnızca istemci ile sunucu arasındaki iletişim kanalını şifreler; ancak sitenizi Cross-Site Scripting (XSS), Clickjacking (Tıklama Hırsızlığı), MIME Sniffing veya SSL Stripping (Protokol Düşürme) saldırılarına karşı korumaz. Modern web standartlarında kurumsal bir sitenin gerçek güvenliği; web sunucusu (Nginx, Apache, Cloudflare) seviyesinde yapılandırılan katı HTTP Güvenlik Başlıkları (HTTP Security Headers) ile sağlanır. Content Security Policy (CSP), sitenize dışarıdan zararlı JavaScript enjeksiyonunu engellerken; HSTS, tüm iletişimin zorunlu olarak şifreli HTTPS üzerinden yapılmasını garanti eder. Bu yapılandırmalar kurumsal web sitelerinin Qualys SSL Labs ve SecurityHeaders denetimlerinde A+ derecesi almasını sağlar.
Neden Sadece SSL Sertifikası Yeterli Değildir?
Kurumsal B2B web siteleri, e-ticaret portalları ve bayi yönetim sistemleri siber saldırganların birincil hedefleri arasındadır. Bir saldırgan sitenize doğrudan sunucu üzerinden sızamasa bile, kullanıcıların tarayıcılarını hedef alan istemci taraflı (Client-Side) saldırılar düzenleyebilir:
- DOM ve Yansıtılmış XSS (Cross-Site Scripting): Üçüncü parti bir kütüphanedeki zafiyet veya filtrelenmemiş bir URL parametresi üzerinden sayfaya zararlı bir
<script>kodu enjekte edilerek ziyaretçinin oturum çerezleri (Session Cookies) veya form verileri çalınabilir. - Magecart ve Tedarik Zinciri Saldırıları: Sitenize eklediğiniz harici bir font, analitik aracı veya sohbet eklentisi ele geçirildiğinde, kullanıcının tarayıcısı farkında olmadan saldırganın uzak sunucusuna veri gönderebilir.
- Clickjacking (Görünmez Çerçeve Tuzağı): Kurumsal web siteniz saldırganın hazırladığı sahte bir sayfanın içine şeffaf bir
<iframe>olarak gömülür; kullanıcı sahte sayfada masum bir butona tıkladığını sanırken aslında sizin sitenizdeki kritik bir onay butonuna tıklatılır. - Ortadaki Adam (MITM) ve SSL Stripping: Kullanıcı tarayıcıya
https://yazmadan sadecesirketiniz.comyazdığında, ilk istek şifresiz HTTP (Port 80) üzerinden çıkar. Aynı Wi-Fi ağındaki bir saldırgan bu ilk yönlendirme paketini yakalayıp şifreli bağlantıya geçişi engelleyebilir.
İşte HTTP güvenlik başlıkları, web sunucusunun tarayıcıya (Chrome, Safari, Firefox, Edge) gönderdiği kesin emirlerdir ve bu saldırı vektörlerini tarayıcı motoru seviyesinde tamamen kilitler.
Kurumsal Güvenlik Başlıkları Matrisi
Kurumsal bir web sitesinin HTTP yanıt başlıklarında (Response Headers) mutlaka bulunması gereken 6 temel güvenlik direktifi ve teknik işlevleri:
| HTTP Güvenlik Başlığı | İşlevi ve Koruma Alanı | Örnek Güvenli Değer (Production) | Önlediği Saldırı Türü |
|---|---|---|---|
| Content-Security-Policy (CSP) | Yalnızca beyaz listeye (Allowlist) alınmış onaylı kaynaklardan script, stil, görsel ve font yüklenmesine izin verir | default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data: https:; object-src 'none'; | Cross-Site Scripting (XSS), Veri Sızıntısı, Zararlı Script Enjeksiyonu |
| Strict-Transport-Security (HSTS) | Tarayıcıyı 1 veya 2 yıl boyunca bu alan adına yalnızca HTTPS üzerinden bağlanmaya zorlar | max-age=63072000; includeSubDomains; preload | SSL Stripping, Protokol Düşürme, Man-in-the-Middle (MITM) |
| X-Frame-Options | Sitenin başka alan adları içerisine <iframe> veya <frame> ile gömülmesini engeller | DENY veya SAMEORIGIN (CSP frame-ancestors 'none' ile birlikte) | Clickjacking (Tıklama Hırsızlığı) ve Arayüz Giydirme |
| X-Content-Type-Options | Tarayıcının sunucudan gelen dosya türünü (MIME) kendi başına tahmin edip çalıştırmasını engeller | nosniff | MIME Confusion (Resim dosyası görünümünde JS çalıştırma) |
| Referrer-Policy | Sitenizden dış linklere tıklandığında URL içindeki hassas parametrelerin karşı siteye sızmasını önler | strict-origin-when-cross-origin | URL Parametre ve Token Sızıntısı (Information Disclosure) |
| Permissions-Policy | Tarayıcının kamera, mikrofon, USB, ödeme ve konum gibi donanım API’lerine erişimini kapatır | camera=(), microphone=(), geolocation=(), payment=() | İzinsiz Donanım Erişimi ve Kötü Amaçlı Üçüncü Parti İzinleri |
Katı CSP Yapılandırmasında “Zero Inline Style” ve Script İlkesi
Content Security Policy (CSP), modern web güvenliğinin en güçlü kalkanıdır ancak aynı zamanda doğru yapılandırılması en yüksek mühendislik disiplini gerektiren başlıktır. Tarayıcı bir HTML sayfasını okurken, eğer bir <script> veya stil bloğu harici bir .js / .css dosyasından gelmek yerine doğrudan HTML etiketlerinin içine satır içi (inline) olarak yazılmışsa; tarayıcı bunun geliştirici tarafından mı yazıldığını yoksa bir XSS saldırganı tarafından mı enjekte edildiğini ayırt edemez.
Neden unsafe-inline ve unsafe-eval Yasaklanmalıdır?
Birçok geliştirici, eski eklentileri veya satır içi kodları bozulmasın diye CSP başlığına script-src 'self' 'unsafe-inline' 'unsafe-eval' parametresini ekler. Oysa CSP kuralına 'unsafe-inline' yazıldığı anda CSP’nin XSS saldırılarına karşı koruma özelliği neredeyse tamamen devre dışı kalır.
Maysa Yazılım olarak geliştirdiğimiz özel yazılım geliştirme ve kurumsal web projelerinde “Sıfır Satır İçi Stil ve Script” (Zero Inline) mimarisini zorunlu kalite kapısı olarak uyguluyoruz:
- HTML elemanlarının içerisine doğrudan satır içi stil öznitelikleri veya
onclickgibi satır içi olay dinleyicileri kesinlikle yazılmaz. - Tüm stiller harici, önbelleklenebilir ve bütünlüğü doğrulanmış CSS dosyalarında (
tokens.css,bilesenler.css,site.css) toplanır. - Böylece CSP politikasında
'unsafe-inline'izni verilmesine gerek kalmaz; saldırgan sayfaya herhangi bir yolla HTML veya script kodu enjekte etse bile tarayıcı bu kodu çalıştırmayı reddeder. - Eğer mutlaka satır içi bir script çalıştırılması gereken dinamik bir durum varsa, her HTTP isteğinde kriptografik olarak rastgele üretilen tek kullanımlık
nonce-...(Number Used Once) veya SHA-256 / SHA-384 Hash (Subresource Integrity - SRI) doğrulaması kullanılır.
HSTS ve HSTS Preload Listesi Mimarisi
Web sunucunuzda http:// (Port 80) isteklerini 301 Moved Permanently ile https:// (Port 443) adresine yönlendirmek standart bir uygulamadır. Ancak kullanıcı sitenize ilk kez girerken yaptığı o ilk şifresiz HTTP isteği ağ üzerinde açık metin (Cleartext) olarak seyahat eder.
HTTP Strict Transport Security (HSTS) başlığı (Strict-Transport-Security: max-age=63072000; includeSubDomains; preload) tarayıcıya şu kesin talimatı verir: “Bundan sonraki 2 yıl (63.072.000 saniye) boyunca kullanıcı adres çubuğuna http:// yazsa bile ağa hiç HTTP paketi çıkarma; isteği daha bilgisayarın içindeyken dahili olarak (HTTP 307 Internal Redirect ile) https:// protokolüne çevir.”
Hatta alan adınızı HSTS Preload listesine kaydettirdiğinizde; Google Chrome, Mozilla Firefox, Microsoft Edge ve Apple Safari tarayıcıları sitenizin adresini kendi kaynak kodlarına gömer. Böylece dünyada sitenize hayatında ilk kez giren bir kullanıcının ilk paketi bile %100 HTTPS olarak başlar.
A+ SSL Sertifikası, TLS 1.3 ve Kriptografik Sıkılaştırma
SSL sertifikasının geçerli olması tek başına yeterli değildir; sunucunun desteklediği TLS (Transport Layer Security) protokol sürümleri ve şifreleme algoritmaları (Cipher Suites) uluslararası siber güvenlik standartlarına göre sıkılaştırılmalıdır:
Eski Protokollerin Kapatılması ve TLS 1.3 Avantajı
Bilinen kriptografik zafiyetler (POODLE, BEAST, SWEET32) barındıran SSLv3, TLS 1.0 ve TLS 1.1 protokolleri sunucu yapılandırmasından tamamen kaldırılmalıdır. Yalnızca TLS 1.2 ve TLS 1.3 protokolleri aktif edilmelidir. TLS 1.3 protokolü, el sıkışma (Handshake) süresini tek tura (1-RTT ve tekrarlayan bağlantılarda 0-RTT) düşürerek hem askeri düzeyde şifreleme sağlar hem de sitenin ilk bayt yanıt süresini (TTFB) milisaniyeler bazında hızlandırır.
Perfect Forward Secrecy (PFS) ve OCSP Stapling
- Kusursuz İleri Gizlilik (Perfect Forward Secrecy - PFS): Sunucuda
ECDHE(Elliptic Curve Diffie-Hellman Ephemeral) anahtar değişim algoritmaları zorunlu kılınmalıdır. PFS sayesinde, gelecekte bir gün sunucunun özel anahtarı (Private Key) çalınsa bile geçmişte kaydedilmiş şifreli ağ trafiğinin çözülmesi matematiksel olarak imkansızdır; çünkü her oturum için geçici (ephemeral) ayrı bir anahtar üretilir. - OCSP Stapling (Sertifika İptal Durumu Zımbalama): Tarayıcılar bir sitenin SSL sertifikasının iptal edilip edilmediğini öğrenmek için sertifika otoritesinin (CA) sunucusuna sorgu atar; bu da bağlantı süresini uzatır. OCSP Stapling aktif edildiğinde web sunucunuz bu doğrulama damgasını kendi önbelleğinde tutar ve TLS el sıkışması sırasında tarayıcıya doğrudan sunar.
Nginx Üzerinde Örnek A+ Güvenlik Yapılandırması
Kurumsal bir Linux/Nginx web sunucusunda A+ güvenlik derecesi sağlayan örnek yapılandırma bloğu:
server {
listen 443 ssl http2;
# Yalnızca modern TLS 1.2 ve TLS 1.3 protokollerini aktif et
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';
# Kurumsal HTTP Güvenlik Başlıkları
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data: https:; font-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" always;
}
Kurumsal web varlıklarınızın siber güvenliğini en üst düzeye çıkarmak ve sıfır satır içi stil disipliniyle kodlanmış projeler geliştirmek için Kurumsal Web Tasarım ve SEO Çözümleri sayfamızı ziyaret edebilir, mevcut web uygulamalarınızın zafiyet taraması için Sızma Testi ve Pentest ekibimizle görüşebilirsiniz.
Sıkça Sorulan Sorular
Mevcut çalışan web sitemize katı CSP başlığı eklersek tasarım veya scriptler bozulur mu?
Eğer mevcut web sitenizde (özellikle hazır WordPress temalarında veya eski sistemlerde) HTML içine gömülü satır içi stiller, satır içi scriptler veya dış kaynaklardan çağrılan kontrolsüz kütüphaneler varsa, doğrudan katı bir CSP kuralı uygulamak bu öğelerin tarayıcı tarafından engellenmesine yol açar. Bu nedenle mevcut sitelerde önce Content-Security-Policy-Report-Only başlığı kullanılır. Bu modda tarayıcı hiçbir şeyi engellemez, sadece kuralı ihlal eden kaynakları raporlar; geliştirici ekibimiz tüm satır içi kodları temizledikten sonra tam koruma moduna geçiş yapılır.
Ücretsiz Let’s Encrypt SSL sertifikası ile ücretli kurumsal (OV / EV) SSL sertifikaları arasında şifreleme gücü farkı var mıdır?
Kriptografik şifreleme gücü (256-bit AES / 2048-bit RSA veya ECDSA) açısından ücretsiz Let’s Encrypt (DV - Domain Validation) sertifikası ile ücretli sertifikalar arasında hiçbir teknik fark yoktur; her ikisi de veriyi aynı matematiksel güçle şifreler ve TLS 1.3 desteğiyle SSL Labs testinden A+ alır. Aralarındaki fark Kimlik Doğrulama (Validation) seviyesidir: OV (Organization Validation) ve EV (Extended Validation) sertifikalarda sertifika otoritesi şirketin ticari sicilini ve hukuki varlığını resmi belgelerle doğrular ve sertifika detaylarında şirket unvanı yer alır.
HTTP güvenlik başlıklarının Google SEO sıralamasına doğrudan bir etkisi var mıdır?
HTTPS kullanımı ve geçerli bir SSL sertifikası Google tarafından resmi olarak açıklanmış doğrudan bir sıralama faktörüdür (Ranking Signal). CSP, HSTS ve X-Frame-Options gibi başlıklar ise dolaylı ancak çok kritik bir SEO koruma kalkanı sağlar: Bu başlıklara sahip olmayan bir site XSS veya zararlı kod enjeksiyonuna uğradığında Google Safe Browsing tarafından “Bu site zararlı olabilir” kırmızı uyarı ekranıyla kara listeye alınır ve organik trafiği bir gecede sıfırlanır. Katı güvenlik başlıkları sitenizin SEO itibarını siber saldırılara karşı sigortalar.