JekCMS için İçerik Güvenlik Politikası: Üretime Hazır Şablon

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 için İçerik Güvenlik Politikası: Üretime Hazır Şablon

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ıtlar
  • object-src 'none' — Flash, Java applet'leri ve diğer eklenti içeriğini engeller; modern kullanımı olmayan yaygın XSS vektörleri
  • base-uri 'self' — saldırganların göreli URL'leri kötü niyetli bir alan adına yönlendirmek için base etiketi enjekte etmesini önler
  • frame-ancestors 'self'X-Frame-Options: SAMEORIGIN ile 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çin unsafe-eval eklemek — 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.

Kaynaklar ve doğrulama

Sürüm ve teknik ayrıntıları aşağıdaki birincil kaynaklardan kontrol edebilirsiniz.

Yazar

Celil Uyanıkoğlu

25 yılı aşkın süredir bilgi işlem sektöründe çalışan bir bilgisayar mühendisi. jekcms'i geliştiriyor ve kendi yayın ağındaki sitelerin tamamını jekcms üzerinde çalıştırıyor — burada yayımlanan her rehber önce o canlı kurulumlarda denenir.

Tüm yazılarını gör →

Hemen Sipariş Verin

Tek seferlik ödeme, ömür boyu erişim. Kurulum 30 dakika.

Fiyatlara Bak
  • 30 dakikada kurulum ve yayın
  • 13 profesyonel tema
  • AVIF/WebP görsel optimizasyonu
  • Otomatik SEO — Sitemap, Schema.org
  • ZeroTrack çerezsiz analitik

Yeniliklerden ilk sen haberdar ol

Yeni özellikler, sürüm notları ve CMS rehberleri — ayda birkaç e-posta, spam yok.