jekcms gerçek, üretimde çalışan bir İçerik Güvenlik Politikasıyla gelir — ne katı bir şablon ne de bir pazarlama iddiasıdır. İşte tam olarak neyi engellediği, bilinçli olarak neye hâlâ izin verdiği ve nedeni.
jekcms'in üretim CSP'si hem script-src hem style-src için 'unsafe-inline' içerir. Bu bilinçli, belgelenmiş bir ödünleşimdir, bir eksiklik değil: Özel Header Script'leri ayarı, site sahiplerinin kendi takip/doğrulama kod parçacıklarını doğrudan sayfaya yapıştırmasına izin verir — bu özellik bozulmadan nonce ile imzalanamaz — ayrıca paketlenmiş temalar ve çekirdek şablonlar bazı yerlerde satır içi <script>/<style> kullanır. unsafe-inline'ı kaldırmak, önce ikisinin de yeniden yazılmasını gerektirir — bu, gizli bir açık değil, açık bir bekleyen iştir.
Fontları Kendi Sunucunuzda Barındırmak İki Direktifi Kaldırır
Google Fonts'tan yüklenen fontlar iki direktif gerektirir: font-src fonts.gstatic.com ve style-src fonts.googleapis.com. jekcms'in paketlenmiş temaları, varsayılan Trends teması dahil, şu anda Inter ve diğer yazı tiplerini kendi sunucusunda barındırmak yerine Google Fonts CDN'inden yüklüyor — CSP'de her iki alan adının da izin listesinde olmasının nedeni bu. Kendi kurulumunuzda kendi sunucunuzda barındırılan fontlara geçerseniz — hem gizlilik hem bir harici istek daha az olması için önerdiğimiz bir şey — politikanızdan her iki alan adını da çıkarıp yalnızca 'self''e güvenebilirsiniz.
Açık img-src Numaralandırması
img-src direktifi, içeriğinizin görsel yüklediği her harici alan adını içermelidir. Yaygın bir hata, herhangi bir HTTPS görsel kaynağına izin vermek için img-src https: ayarlamaktır — bu, görsel-tabanlı saldırılara karşı CSP'nin değerinin çoğunu ortadan kaldırır. jekcms'in kendi varsayılan politikası, keyfi gömülü içerikle uyumluluk için bu kestirmeyi kullanır (img-src 'self' data: https:); bu esnekliğe ihtiyacınız yoksa gerçek görsel kaynaklarınızı açıkça belirtin: img-src 'self' cdn.siteniz.com data:.
Sıkılaştırırken Her Zaman Report-Only Modla Başlayın
jekcms'in varsayılan politikasını kendi siteniz için daraltmayı planlıyorsanız, herhangi bir şeyi uygulamaya koymadan önce bir toplama ucuna işaret eden Content-Security-Policy-Report-Only ile başlayın. En az bir hafta boyunca ihlalleri toplayın — hafta sonu trafiği genellikle hafta içi izlemenin kaçırdığı kod yollarını çalıştırır. jekcms şu anda dahili bir ihlal-loglama ucu ile gelmiyor; birine ihtiyacınız varsa report-uri'yi kendi kontrolünüzdeki bir servise yönlendirmeniz gerekir.
jekcms'in Gerçek Üretim CSP'si
Bu, jekcms'in üretimde (Security.php üzerinden) gönderdiği gerçek başlıktır; varsayılan tema seti ile yerleşik Google Analytics/AdSense/GTM ve Facebook Pixel entegrasyonlarını kapsar:
Content-Security-Policy:
default-src 'self';
base-uri 'self';
object-src 'none';
frame-ancestors 'self';
script-src 'self' 'unsafe-inline'
https://cdn.jsdelivr.net https://cdnjs.cloudflare.com
https://www.googletagmanager.com https://www.google-analytics.com
https://pagead2.googlesyndication.com https://adservice.google.com
https://www.googleadservices.com https://connect.facebook.net;
style-src 'self' 'unsafe-inline'
https://fonts.googleapis.com https://cdn.jsdelivr.net;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
frame-src 'self' https://googleads.g.doubleclick.net
https://tpc.googlesyndication.com https://www.google.com
https://www.facebook.com;
connect-src 'self' https://www.google-analytics.com
https://analytics.google.com https://www.googletagmanager.com
https://pagead2.googlesyndication.com https://adservice.google.com
https://www.facebook.com;
Orada OLMAYAN'a dikkat edin: 'unsafe-eval'. jekcms'in kendi kodunun veya paketlenmiş üçüncü taraf script'lerinin (Tiptap, Google Analytics/AdSense/GTM, Facebook Pixel) hiçbiri buna ihtiyaç duymuyor, bu yüzden script-src izin listesine hiç eklenmedi.
Direktif Direktif Açıklama
default-src 'self'— açıkça listelenmemiş herhangi bir kaynak türü için temel; her şeyi aynı origin'e kısıtlarobject-src 'none'— Flash, Java applet'leri ve diğer eklenti içeriğini engeller; modern kullanımı olmayan yaygın XSS vektörleribase-uri 'self'— saldırganların göreli URL'leri kötü niyetli bir alan adına yönlendirmek için base etiketi enjekte etmesini önlerframe-ancestors 'self'—X-Frame-Options: SAMEORIGINile eşdeğerdir ama daha geniş tarayıcı desteğine sahiptir; clickjacking'i önler (jekcms her ikisini de gönderir)
AdSense ve Analytics Alan Adları Neden Orada
Yukarıdaki politikada googlesyndication.com, adservice.google.com, googleadservices.com ve doubleclick.net alan adları, jekcms'in yerleşik Google entegrasyon eklentisinin ayarlarda yapılandırdığınızda AdSense/GA4/GTM kod parçacıklarını enjekte etmesi nedeniyle orada — her jekcms sitesinin reklam çalıştırdığı için değil. Kurulumunuzda AdSense'i hiç etkinleştirmezseniz, özelleştirilmiş bir politikadan bu alan adlarını güvenle çıkarabilirsiniz. Google'ın reklam altyapısı zamanla alt alan adlarını döndürür ve ekler; politikayı kendiniz sıkılaştırırsanız, herhangi bir izin listesini kalıcı saymak yerine ara sıra gözden geçirmeyi bekleyin.
Politikayı Özelleştirirken Yaygın Hatalar
- Bir kütüphane
eval()kullandığı içinunsafe-evaleklemek — bunun yerine alternatif bir kütüphane bulun; jekcms'in kendi altyapısı buna ihtiyaç duymaz - CDN alan adlarını geniş şekilde beyaz listeye almak (örn.
*.cloudflare.com) — saldırganlar aynı CDN'de script barındırabilir - AJAX istekleri için
connect-src'i unutmak — admin panel işlevselliğini sessizce bozar - Yalnızca genel frontend'i test etmek — admin paneli farklı bir script kümesi yükler (editör paketi, medya seçici) ve kendi kontrolüne ihtiyaç duyar
Bugün Durum Gerçekte Nerede
jekcms, üretimde Security.php üzerinden TEK bir global CSP uygular — /admin/ rotaları için ayrı, daha esnek bir politika yoktur ve henüz nonce tabanlı script yükleme yoktur. Koddaki açık bir TODO, nonce geçişini büyük bir refactor olarak işaretliyor: script-src'den 'unsafe-inline' kaldırılmadan önce admin panelindeki ve paketlenmiş temalardaki her satır içi script'in güncellenmesi gerekir. Ayrıca ihlalleri admin panelinde görülebilir bir tabloya kaydeden yerleşik bir CSP ihlal loglaması da yoktur — ihlalleri izlemek isterseniz report-uri'yi kendi toplama ucunuza yönlendirmeniz gerekir. Bunların hiçbiri gizli değil; güvenlik marjıyla Özel Header Script'leri özelliğini veya mevcut temaları bozmamak arasında belgelenmiş, gerekçeli bir ödünleşimdir.