Content-Security-Policy'yi Adım Adım Devreye Almak
Content Security Policy'yi Adım Adım Devreye Almak hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 6 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
Content-Security-Policy'yi Adım Adım Devreye Almak hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 6 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
Konuya genel bakış
Content-Security-Policy (CSP), tarayıcıya sayfada hangi kaynaktan betik, stil ve görsel yüklenebileceğini söyleyen bir HTTP başlığıdır. İyi yapılandırılmış bir CSP, gözden kaçan bir XSS açığında bile saldırganın betiğinin çalışmasını engeller. Aceleyle devreye alınan bir CSP ise sitenin yarısını bozabilir; bu yüzden önce raporlama kipinde başlanır.
Bilmeniz gereken 6 temel nokta
- Önce Report-Only: Content-Security-Policy-Report-Only başlığı hiçbir şeyi engellemez, yalnız ihlalleri raporlar; birkaç gün boyunca raporları toplayın.
- Nonce ile satır içi betik: Her istekte yeniden üretilen nonce, yalnızca sizin eklediğiniz satır içi betiklerin çalışmasına izin verir.
- unsafe-inline'dan kaçının: script-src içinde unsafe-inline kullanmak CSP'nin XSS korumasını büyük ölçüde ortadan kaldırır.
- frame-ancestors: Sayfanın başka sitelerde çerçeve içinde açılmasını engeller; X-Frame-Options başlığının modern karşılığıdır.
- Raporlama: report-uri hâlâ yaygın biçimde destekleniyor; yeni tarayıcılar Reporting-Endpoints başlığı ile report-to yönergesini kullanır.
- Kademeli geçiş: İhlal raporları temizlendiğinde başlığın adını Content-Security-Policy olarak değiştirip engellemeyi başlatın.
Örnek kod
Aşağıdaki PHP örneği, yukarıdaki noktaların gerçek bir kodda nasıl bir araya geldiğini gösteriyor:
// 1. aşama: yalnız raporla, hiçbir şeyi engelleme
$nonce = base64_encode(random_bytes(16));
header("Content-Security-Policy-Report-Only: "
. "default-src 'self'; "
. "script-src 'self' 'nonce-$nonce' https://cdn.jsdelivr.net; "
. "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; "
. "font-src 'self' https://fonts.gstatic.com; "
. "img-src 'self' data: https:; "
. "frame-ancestors 'self'; base-uri 'self'; form-action 'self'; "
. "report-uri /csp-rapor");
?>
<script nonce="<?= $nonce ?>">
// satır içi betik yalnız doğru nonce ile çalışır
</script>Örnek bilinçli olarak kısa tutuldu; gerçek projede hata yönetimi ve günlükleme gibi katmanlar eklenmelidir.
Kullanıcıdan gelen veriyi ekrana basarken htmlspecialchars() ile kaçışlamak XSS saldırılarının önüne geçer.
Size ne kazandırır?
Content-Security-Policy'yi Adım Adım Devreye Almak konusunu doğru uygulamanın başlıca kazanımları şunlar:
- Saldırı yüzeyini daraltır ve olası veri sızıntılarının önüne geçer
- Güvenlik denetimlerinden daha kolay geçen bir kod tabanı sağlar
- Hataların canlı ortama çıkmadan fark edilmesine yardım eder
- Kullanıcı güvenini ve marka itibarını korur
Son söz
Content-Security-Policy'yi Adım Adım Devreye Almak, küçük ama düzenli adımlarla ustalaşılan konulardan biri. Özellikle Önce Report-Only ve Kademeli geçiş başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- Google Authenticator ile İki Adımlı Doğrulama (TOTP) Nasıl Çalışır?
- PHP PDO ile SQL Injection Koruması
- PHP ile Güvenli Dosya Yükleme: 8 Kontrol
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.