İçerik Güvenlik Politikasında (CSP) açıklar var
sec_csp_weakKısa cevap
İçerik Güvenlik Politikanız betiklere saldırganın kullanabileceği bir biçimde izin veriyor: nonce ya da hash olmadan 'unsafe-inline', 'unsafe-eval', joker *, düz https:, http: ya da data: kaynağı veya hiç script-src/default-src olmaması. Bunlardan herhangi biri yerleştirilen betiklerin çoğunun çalışmasına izin verir; politika XSS'e karşı az koruma sağlar. Bunların yerine, tercihen 'strict-dynamic' ile birlikte nonce ya da hash kullanın.
Neden önemli
'unsafe-inline' varken yerleştirilen bir <script> etiketi ya da onerror= niteliği hiç politika yokmuş gibi çalışır; joker ya da düz https:, saldırganın kendi denetimindeki herhangi bir sunucudan betik yüklemesine izin verir; 'unsafe-eval' yerleştirilen metni koda dönüştürür. Google'ın gerçek politikalar üzerindeki incelemesi, izin listesine dayalı CSP'lerin çoğunun atlatılabildiğini gösterdi; bugün nonce ya da hash tabanlı politikaların önerilmesinin sebebi budur. Güvenlik başlıkları sıralamayı etkilemez; mesele, zaten sürdürdüğünüz politikanın ziyaretçileri gerçekten koruyup korumadığıdır.
Glimana bunu nasıl tespit eder
Glimana HTTPS ana sayfanızın Content-Security-Policy başlığını (başlık yoksa CSP meta etiketini) okur ve betikleri yöneten yönergeyi değerlendirir: script-src, o yoksa default-src. İki yönerge de yoksa, 'unsafe-inline' nonce, hash ya da 'strict-dynamic' olmadan geçiyorsa, 'unsafe-eval' varsa ya da listede *, https:, http:, bir http:// sunucusu veya data: bulunuyorsa düşük önemle başarısız olur. 'strict-dynamic' varken, CSP Düzey 3 tarayıcılarının yaptığı gibi sunucu ve şema girdileri yok sayılır. Eksik object-src 'none' ya da base-uri öneri olarak gösterilir ama kontrolü düşürmez; style-src değerlendirilmez. Hiç CSP yoksa bu kontrol Uygulanmaz olur.
Nasıl düzeltilir
Dikkat
Nonce rastgele olmalı ve her yanıtta yenilenmelidir. Tam sayfa önbelleği (bir önbellek eklentisi, HTML'i önbelleğe alan bir CDN, Varnish) sayfayı saklarsa her ziyaretçi aynı nonce'u alır ve koruma ortadan kalkar; değişmeyen satır içi betikler için hash kullanın ya da nonce içeren sayfaları önbellek dışında tutun. 'unsafe-eval' kaldırmak eski kütüphaneleri ve bazı etiket yöneticisi kurulumlarını bozabilir; önce yalnız rapor kipinde deneyin.
- Glimana'da bulguyu bulun. Güvenlik sayfasını açın; bu kontrol Güvenlik başlıkları grubunda, son taramanın kanıtı başlığının altında. Aynı sorun Sorunlar › İçerik Güvenlik Politikasında (CSP) açıklar var altında da listelenir.
-
Düzeltmeyi platformunuzda uygulayın.
Her yanıt için yeni, rastgele bir nonce üretin (en az 128 bit, base64 kodlu), çıktıladığınız her betik etiketine ekleyin,
<script nonce="R4nd0mV4lu3">, ve eşleşen başlığı gönderin:Content-Security-Policy: script-src 'nonce-R4nd0mV4lu3' 'strict-dynamic' https: 'unsafe-inline'; object-src 'none'; base-uri 'none'. Nonce destekleyen tarayıcılar bu politikadaki'unsafe-inline'vehttps:değerlerini yok sayar; bunlar yalnız çok eski tarayıcılar için yedektir ve Glimana politikayı aynı şekilde değerlendirir.onclick=gibi satır içi olay işleyicileriniaddEventListenerkullanan betiklere taşıyın; nonce bunları kapsamaz.WordPress 6.4 ve sonrasında çekirdek betik API'siyle basılan betikler
wp_get_script_tag()vewp_get_inline_script_tag()üzerinden geçer; bu yüzdenwp_script_attributesvewp_inline_script_attributessüzgeçleri bunlaranonceniteliği ekleyebilir. Küçük bir eklentide nonce'u istek başına bir kez üretin (örneğinbase64_encode(random_bytes(16))) ve eşleşen başlığısend_headerskancasından gönderin. Bir tema ya da eklentinin doğrudan yazdırdığı betikler bu süzgeçlerden geçmez; zorunlu yapmadan önce politikayı yalnız rapor kipinde çalıştırıp konsolu kontrol edin.Transform Rule ile konan sabit bir başlık istek başına nonce taşıyamaz. Hiç değişmeyen satır içi betikler için hash kullanın:
script-src 'self' 'sha256-…'; hash'i, engellenen betiği bildiren tarayıcı konsolu iletisinden kopyalayın. Uçta nonce için her yanıtta hem HTML'i hem başlığı yeniden yazan bir Cloudflare Worker gerekir. - Glimana'da kontrol edin. Güvenlik sayfasında Yeniden tara düğmesine basın (saatte en çok iki tarama) ya da pazar günkü haftalık taramayı bekleyin; kontrol geçince sorun kapanır.
Düzeltme nasıl doğrulanır
Güvenlik sayfasında Yeniden tara düğmesine basın (ya da pazar günkü haftalık taramayı bekleyin); kontrol geçtiğinde sorun kapanır.