Content Security Policy
İçerik Güvenliği Politikası
- Okunuşu
- kontent sikyurıti polısi
Kısaca
Content Security Policy, tarayıcıya sayfanın hangi betik, stil ve kaynakları yükleyebileceğini bildirip enjekte edilen kodu engelleyen HTTP yanıt başlığıdır.
Content Security Policy nedir?
Content Security Policy (CSP), bir web sitesinin Content-Security-Policy HTTP başlığında gönderdiği kurallar bütünüdür. Direktif adı verilen her kural, bir kaynak türü için izin verilen kaynakları listeler: JavaScript için script-src, CSS için style-src, görseller için img-src, fetch() ve WebSocket bağlantıları için connect-src gibi. Tarayıcı kuralları uygular ve eşleşmeyen her şeyi engeller.
CSP, esas olarak cross-site scripting'e (XSS) karşı ikinci bir savunma hattıdır. Bir saldırgan sayfaya bir <script> etiketi ya da satır içi olay işleyicisi enjekte etmeyi başarırsa, sıkı bir politika tarayıcının onu çalıştırmasını engeller; çünkü betik izin verilen bir kaynaktan gelmiyordur. Önerilen yaklaşım, nonce veya hash tabanlı sıkı bir politikadır: sunucu her yanıt için yeni bir rastgele nonce üretir ve bunu hem başlığa hem de her meşru <script> etiketine ekler; böylece yalnızca bu betikler çalışır.
CSP'yi sayfanız için bir konuk listesi gibi düşünün: bir hata sayesinde içeri bir davetsiz misafir sızsa bile kapıdaki görevli yalnızca isimleri listede olan betikleri içeri alır. CSP ayrıca, sayfanızı hangi sitelerin bir iframe içine gömebileceğini denetleyen frame-ancestors direktifiyle clickjacking'i engelleyebilir ve upgrade-insecure-requests ile güvensiz kaynak isteklerini HTTPS'e yükseltebilir.
CSP, XSS hatalarını çıktı kodlaması ve sanitization ile düzeltmenin yerini tutmaz; bir hata gözden kaçtığında zararı sınırlar. Sık yapılan hatalar, script-src'e 'unsafe-inline' ya da https: gibi geniş kaynaklar eklemektir; bunlar korumanın çoğunu iptal eder. Yeni bir politikayı önce Content-Security-Policy-Report-Only başlığıyla devreye alın, ihlal raporlarını inceleyin ve meşru kaynaklar artık engellenmediğinde zorunlu uygulamaya geçin.
Önemli noktalar
- CSP, bir sayfanın kaynakları nereden yükleyebileceğini kısıtlayan bir HTTP başlığıdır.
- Asıl amacı enjekte edilen betikleri engellemek ve XSS zararını azaltmaktır.
- Sıkı politikalar, uzun alan adı izin listeleri yerine nonce veya hash kullanır.
frame-ancestors, clickjacking'e karşı korur.- Uygulamadan önce
Content-Security-Policy-Report-Onlyile test edin.
Örnek
# Only scripts carrying this response's nonce may run
# (the server generates a new random nonce for every response)
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Security-Policy: script-src 'nonce-r4nd0mV4lue' 'strict-dynamic'; object-src 'none'; base-uri 'none'; frame-ancestors 'self'
<!-- Allowed: the nonce matches the header -->
<script nonce="r4nd0mV4lue" src="/app.js"></script>
<!-- Blocked: an injected script has no valid nonce -->
<script>stealCookies()</script>Sık sorulan sorular
Content Security Policy, XSS'i önler mi?
Sıkı bir CSP, enjekte edilen betiklerin çalışabileceği yolların çoğunu engeller ve XSS'in etkisini büyük ölçüde azaltır, ancak bir çare değil, yedek bir katmandır. Yine de çıktıyı kodlamanız ve kullanıcının sağladığı HTML'i sanitize etmeniz gerekir.
CSP nonce nedir?
Nonce, her yanıt için yeniden üretilen ve CSP başlığına ile her güvenilir <script> etiketine yerleştirilen rastgele bir değerdir. Tarayıcı yalnızca eşleşen nonce'a sahip betikleri çalıştırır ve saldırgan bunu önceden tahmin edemez.
CSP'de unsafe-inline ne anlama gelir?
'unsafe-inline', satır içi betiklerin ve onclick gibi olay işleyici özniteliklerinin çalışmasına izin verir; çoğu XSS saldırısının enjekte ettiği şey tam olarak budur. script-src içinde bundan kaçının ve bunun yerine nonce veya hash kullanın.
İlgili sayfalar
- XSSGüvenlik, s. 47XSS, saldırganın güvenilir bir siteye kötü amaçlı JavaScript enjekte edip bu kodu diğer kullanıcıların tarayıcısında çalıştırmasına yol açan zafiyettir.
- HTTPWeb Geliştirme, s. 20HTTP, tarayıcıların, uygulamaların ve sunucuların basit bir istek-yanıt döngüsüyle web sayfaları ve veri alışverişi yapmasını sağlayan protokoldür.
- HTTPSGüvenlik, s. 15HTTPS, tarayıcı ile web sitesi arasındaki trafiği TLS ile şifreleyen, verileri dinlemeye ve değiştirilmeye karşı koruyan HTTP'nin güvenli sürümüdür.
- JavaScriptWeb Geliştirme, s. 25JavaScript, web tarayıcılarında sayfaları etkileşimli hale getiren ve Node.js gibi çalışma ortamlarıyla sunucularda da çalışan programlama dilidir.
- HTMLWeb Geliştirme, s. 19HTML, başlık, paragraf, bağlantı, görsel ve form gibi öğelerle web sayfalarının yapısını ve içeriğini tanımlayan işaretleme dilidir.
- CORSWeb Geliştirme, s. 9CORS, bir sunucunun JavaScript'ten istek yapan hangi diğer sitelerin yanıtlarını okuyabileceğini bildirmesini sağlayan tarayıcı güvenlik mekanizmasıdır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin