CodeBlanks Logo Icon CodeBlanks

Security headers (CSP, HSTS)

PHP kursu · Uzman · Ders 31/54

Content-Security-Policy, HSTS ve X-Content-Type-Options başlıklarını yapılandırmayı öğrenirsin.

CSP ne işe yarar?

Content-Security-Policy (CSP) tarayıcıya hangi kaynakların yüklenmesine izin verildiğini söyler. default-src 'self' tüm kaynakları aynı kökene kısıtlar; script-src, style-src, img-src ile daha ince ayar yapılır. CSP, inline script ve style'i varsayılan olarak engeller; bu yüzden nonce veya hash eklemen gerekir.

Raporlama için report-uri direktifi kullanılır. CSP, XSS saldırılarının etkisini büyük ölçüde azaltır; tek bir yanlış kaçış bile script enjeksiyonunu engeller. Üretimde küçük adımlarla başla: önce yalnızca rapor modunda çalış, ihlalleri düzelt, sonra zorla.

HSTS ve X-Content-Type-Options

Strict-Transport-Security (HSTS) tarayıcıya yalnızca HTTPS üzerinden bağlanmasını söyler; max-age süresi boyunca HTTP düşürme saldırısı (downgrade) engellenir. includeSubDomains tüm alt alanları kapsar; preload tarayıcının yerleşik listesine eklenmesini sağlar. Yalnızca HTTPS üzerinde çalışır.

X-Content-Type-Options: nosniff tarayıcının bildirilen MIME türünden sapmasını engeller; eski tarayıcılarda MIME sniffing XSS vektörünü kapatır. İki başlık birlikte gönderilir; header() çağrısı çıktıdan önce yapılmalıdır.

Uygulama Üç güvenlik başlığı gönder

header() ile üç başlık gönder: Content-Security-Policy: default-src 'self'; object-src 'none', X-Content-Type-Options: nosniff ve Strict-Transport-Security: max-age=31536000; includeSubDomains. Sonra $msg değişkenini echo ile yazdır.

Örnek çözümü göster
default-src 'self'; object-src 'none'"); header("X-Content-Type-Options: nosniff"); header("Strict-Transport-Security: max-age=31536000; includeSubDomains"); yaz. $msg = "başlıklar gönderildi"; tanımla, echo $msg . "\n"; ile yazdır.
Örnek çözüm:
<?php
header("Content-Security-Policy: default-src 'self'; object-src 'none'");
header("X-Content-Type-Options: nosniff");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
$msg = "başlıklar gönderildi";
echo $msg . "\n";

Kendini test et

  1. MIME sniffing'i önleyen başlık hangisi?

    • X-Content-Type-Options: nosniff
    • Content-Security-Policy: default-src 'self'
    • Strict-Transport-Security: max-age=31536000
    • X-Frame-Options: DENY
    Cevabı göster

    X-Content-Type-Options: nosniff — Doğru. X-Content-Type-Options: nosniff MIME sniffing'i engeller.

  2. Güvenlik başlıklarını eşleştir

    Content-Security-Policy
    Kaynak kısıtlaması
    Strict-Transport-Security
    HTTPS zorlaması
    X-Content-Type-Options
    MIME sniffing önü
    max-age=31536000
    Bir yıl HSTS
  3. X-Content-Type-Options başlığını gönder

    header("____: nosniff");
    Cevabı göster
    header("X-Content-Type-Options: nosniff");

Uzman bölümündeki tüm dersler