Güvenlik

Bu sayfada WebBlocks CMS güvenlik modeli ve operatör adımları açıklanmaktadır veya ajansın bunu müşteri siteleri için güvenli bir şekilde çalıştırması gerekir. Nasıl rapor edileceği konusunda güvenlik açığı, bkz. SECURITY.md — lütfen herkese açık açmayın güvenlik raporlarıyla ilgili sorunlar.

Dağıtım güçlendirme

Bunlar bir üretim kurulumu için en önemli kontrollerdir:

  • Web kökü olarak yalnızca public/'ye hizmet edin. Uygulama kökü şunları içerir: .env, .git, .github, storage/, vendor/ ve kaynak kodu asla web'e erişilemez. Nginx/Apache belge kökünüzü şuraya yönlendirin: public/ ve https://your-site/.git/config ve https://your-site/.env'nin her ikisi de 404'yi döndürür. Açığa çıkan bir .git dizini sızdırılıyor kaynağınızın tamamı ve taahhüt ettiğiniz sırlar.
  • Üretimdeki ham git klonu yerine yayın yapıtını tercih edin. Sürüm paketler .git, .github, project/ ve diğer çalışma zamanı olmayan dosyaları hariç tutar (bkz. .gitattributes export-ignore kuralları). Bir klon dağıtırsanız devre dışı bırakın yüklemeye basın (git remote set-url --push origin DISABLED).
  • Set APP_DEBUG=false ve üretimde güçlü bir APP_KEY. Hata ayıklama modu yığın izlerini, ortam değerlerini ve dahili yolları sızdırıyor.
  • TLS üzerinden hizmet verirken HTTPS kullanın ve SESSION_SECURE_COOKIE=true'yi ayarlayın.
  • Dosya izinleri: web/PHP kullanıcısının storage/ ve üzerinde okuma/yazma ihtiyacı var backups disk kökü (varsayılan storage/app/backups). , 777'yi kullanmıyor mu; bunun yerine sahiplik veya grup erişimi verin.
  • .env. .env, .env.* (.env.example hariç) içinde sırları saklayın ve auth.json git tarafından göz ardı edilir. CMS API belirteçleri ve posta şifreleri hiçbir zaman depoya yazıldı.

Kimlik doğrulama ve yetkilendirme

  • CMS kimlik doğrulaması Laravel-yereldir (Breeze/Jetstream/Fortify gerekliliği yoktur). Yöneticiler /webadmin/login'de oturum açın; şifreler bcrypt karmadır.
  • Üç kurulum rolü kapı erişimi: super_admin (kurulum çapında), site_admin (atanan siteler) ve editor (atanan siteler içindeki taslak içerik). Siteler arası eylemler (taşıma/çoğaltma, Shared Slots) hem kaynağa hem de hedefe erişimi zorunlu kılar siteler. Bkz. Kullanıcılar ve İzinler.
  • /webadmin yönetici ağacı, CMS web + kimlik doğrulama + yönetici erişimi tarafından korunmaktadır ara yazılım yığını. Genel yollar hiçbir zaman taslak içerik oluşturmaz; taslak/önizleme erişim, kimliği doğrulanmış bir yönetici veya content.read'ye sahip güvenilir bir belirteç gerektirir.
  • Oturum açma ve parola sıfırlama istekleri hız sınırlıdır. Başarısız oturum açma işlemleri e-posta+IP başına kısıtlanır (varsayılan 5 deneme, ardından kısa bir kilitleme) başarılı oturum açma işlemleri temizlenir; WEBBLOCKS_CMS_MAX_LOGIN_ATTEMPTS ile ayarlayın ve WEBBLOCKS_CMS_LOGIN_DECAY_SECONDS). IP başına bir geri durdurma ek olarak Sellere karşı giriş yapma, şifremi unuttum ve şifreyi sıfırla uç noktaları ve e-posta döndürme girişimleri.

Internal Content API belirteçleri

Internal Content API (/webadmin/api), güvenilir operatör/yapay zeka araçları içindir.

  • Kişisel belirteçler, Profil → Kişisel bölümünden herhangi bir aktif CMS kullanıcısı tarafından oluşturulur. API Tokenları; kurulum düzeyindeki Sistem belirteçleri bir super_admin tarafından oluşturulur System → API Tokens'den. Her ikisi de hash olarak depolanır ve düz olarak gösterilir yalnızca bir kez mesaj gönderin.
  • Her jeton, açık yetenekleri (okuma, yayınlama, medya, eklenti) taşır yaşam döngüsü, ticaret,…). Gelişmiş/yıkıcı yetenekler ayrı tercihlerdir; normal sayfa oluşturma yetenekleri varsayılandır.
  • Tokenlar iptal edilebilir (denetim satırını koruyarak) veya silinebilir. Jeton başına etkinlik günlüğü zamanı, yöntemi/yolu, rotayı, yetenek sonucunu, IP'yi ve bir kullanıcı aracısı özeti — ancak hiçbir zaman gövdeleri, sorgu dizelerini, yanıtları veya belirteç değerleri.
  • API belirteçlerini sır olarak tedavi edin. Bunları bir aracın minimum yeteneklerine göre kapsayın çıkarın ve açığa çıkarsa döndürün.
  • Kişisel API belirteçleri, seçilen yetenekler ve sitelerle sürekli olarak kesişir sahibinin canlı rolü, etkin durumu, site atamaları ve sayfasıyla birlikte iş akışı yetkilisi. Kurulum düzeyindeki işlemler yalnızca Sistem belirteci olarak kalır.
  • Kişisel API belirteçleri, tam IPv4/IPv6 adresleri veya CIDR ile sınırlandırılabilir ağlar ve dakika başına belirteçlere özgü bir istek tavanı taşırlar. Bu kontroller canlı kullanıcı, site, iş akışı ve yetenek erişimine ek olarak uygulanır.
  • Hem standart /webadmin/api rotaları hem de eski /admin-api uyumluluk rotaları Internal Content API hız sınırlayıcıyı paylaşır.

Ters proxy veya CDN mevcut olduğunda, Laravel'yi yalnızca gerçek proxy adreslerini kontrol edin ve çözümlenen istemci IP'sini etkinleştirmeden önce doğrulayın. izin verilenler listesi. Doğrudan internetten yönlendirilen sahte başlıkları asla kabul etmeyin.

Kişisel API Belirteçlerine bakın ve Internal Content API.

Güncelleme güvenliği

Uygulama içindeki Sistem Güncellemeleri, canlı sitedeki vendor/fklavyenet/webblocks-cms dizininde bulunan CMS paket kodunu değiştirir. Güncelleme yeni kod çalıştırdığı için indirilen paketin bütünlüğü bir uzaktan kod yürütme sınırıdır. WebBlocks CMS bu riski şu şekilde sınırlar:

  • Zorunlu SHA-256 sağlama toplamı. Güncelleyici sürüm ZIP dosyasını indirir; ardından hash_file('sha256', …) sonucunu sürüm meta verilerinde sağlanan checksum_sha256 değeriyle, zamanlama saldırılarına karşı güvenli hash_equals işlevini kullanarak karşılaştırır. Sağlama toplamı yoksa veya eşleşmiyorsa güncelleme reddedilir; doğrulanmamış bir paketin uygulanmasına geçilmez.
  • Kanonik güncelleme hizmeti. Güncelleme meta verileri ve indirmeler publisher.webblocksui.com üzerinden gelir. Sağlama toplamı, indirmeyle birlikte aynı hizmet tarafından sağlandığından bozulmuş veya değiştirilmiş paketleri tespit eder; güncelleme hizmetinin tamamen ele geçirilmesine karşı koruma sağlamaz.
  • Kurulumlar tüketicidir, yayıncı değildir. Kurulu siteler güncellemeleri alır; üst kaynak deposuna gönderim yapmamalıdır. Yayınlama yalnızca bakım için kullanılan çalışma kopyasından ve bir WEBBLOCKS_PUBLISHER_TOKEN ile yapılır.

İmza doğrulaması (Ed25519)

Güvenliği ihlal edilmiş bir güncelleme hizmetine karşı derinlemesine savunma için - burada sağlama toplamı yapıtın yanında seyahat eder — yayınlar şifreli olarak imzalanabilir. Yayıncı, sürüm sağlama toplamını Ed25519 gizli anahtarıyla imzalar ve yükler. imzayı sabitlenmiş bir genel anahtara (sodium_crypto_sign) göre doğrulayın; install, gerçek anahtar tarafından imzalanmayan tüm sürümleri reddeder.

Etkinleştirmek için:

  1. Bakım/yayıncı makinesinde bir kez anahtar çifti oluşturun: php artisan webblocks:updates:keygen.
  2. Yazdırılan WEBBLOCKS_PUBLISHER_SIGNING_KEY'yi (gizli) gizli tutun; ayarlayın yalnızca sürümleri yayınladığınız yerde. Asla taahhüt etmeyin veya bir kurulumda ayarlamayın.
  3. Yazdırılan genel anahtarı sabitleyin, böylece kurulumlar imzalı sürümleri doğrular: set WEBBLOCKS_UPDATE_PUBLIC_KEY veya ReleaseDefaults::UPDATE_PUBLIC_KEY'yi şu şekilde ayarlayın: anahtar CMS koduyla birlikte gönderilir (önerilir; kodla sabitlenmiş bir anahtar kullanılamaz) güvenliği ihlal edilmiş bir .env aracılığıyla değiştirildi).
  4. Her zamanki gibi yayınlayın; yayıncı her yayını otomatik olarak imzalar.

Kullanıma sunma güvenlidir: hiçbir ortak anahtar sabitlenmediğinde imza doğrulaması yapılmaz zorunlu kılınmıştır (sağlama toplamı doğrulaması hala geçerlidir). Bir genel anahtar sabitlendiğinde ve yüklemeler bu kodu aldığında, gelecekteki her sürümün geçerli bir Ed25519 taşıması gerekir sağlama toplamı üzerine imza atılır veya güncelleme reddedilir.

İçerik ve giriş güvenliği

  • Genel formlar yerel bir koruma hattını paylaşır: forma bağlı imzalı kanıt, oluşturulan bal küpleri, zamanlama, içerik/tekrar puanlama, anahtarlı gönderen ve kaynak sayaçlar, /24 veya /64 ağ basıncı ve sitede yerel olarak öğrenilen parmak izleri. Dışarıdan herhangi bir talepte bulunmaz. Koruma sayaçları anahtarlı karmalar kullanır; günlük ölçümler yalnızca toplu kararları içerir. Bkz. Kamuya Gönderim Koruma.
  • İletişim formları mağazası, inceleme için gönderimleri puanladı. Karantina ve spam engelleme bildirim teslim geçmişinden ayrı kalırken bildirim. Bkz. İletişim Formları ve Mesajları.
  • Yorumlar varsayılan olarak pending'dir; bir spam kararı spam olarak tutulur ve hiçbir zaman denetlenmeden herkese açık olarak görünür.
  • Güvenilir HTML, sarmalayıcıya bitişik düzen işaretlemesiyle sınırlıdır ve komut dosyalarını enjekte etmek için kullanılır; Dahili blok sözleşmelerini tercih edin Content API, önce taslağı doğrular.
  • Medya yüklemeleri resim, video ve belgeden oluşan izin verilenler listesiyle sınırlıdır türler (içerik koklandı, uzantıya güvenilmedi). SVG yüklemeleri devre dışı bırakıldı varsayılan olarak, çünkü bir SVG satır içi komut dosyasını taşıyabilir ve medya yönetici ile aynı kökene sahip. Yalnızca her hesabın bulunduğu yüklemelerde etkinleştirin WEBBLOCKS_CMS_ALLOW_SVG_UPLOADS=true aracılığıyla medya yükleyebilen güvenilirdir. Aynı izin verilenler listesi, sunucu tarafı uzaktan medya getirme işlemlerini de yönetir.
  • Uzaktan medya getirme, her yönlendirme hedefini doğrular ve HTTP'yi sabitler doğrulamayı geçen genel IP adresine bağlantı. Bu, DNS yeniden bağlama saldırıları tarafından kullanılan DNS arama/bağlantı yarışı. Uzaktan getirme PHP cURL adresi sabitleme mevcut olmadığında kapatılamaz.
  • Yönetilen Gömülü Uygulama iframe'leri opak kökenli sanal alanlardır. giriş yanıtları kısıtlayıcı CSP ve yönlendiren başlıklarını uygular. CSP'nin isimleri opak kökenli belgelerin yüklenebilmesi için mevcut kayıtlı site kaynağı açıkça izni vermeden aynı sitedeki komut dosyaları, stiller, medya ve <base> URL'leri CMS çerezlerine, depolamaya, ana sayfaya veya kimliği doğrulanmış panel istekleri.
  • Komple Gömülü Uygulama paketleri yalıtılmış kalır. Değişmez, sürümlü paket dosyaları yalnızca uygulamaya yönelik genel bir rota üzerinden sunulur Anonim CORS ve çapraz köken kaynak başlıkları ile opak kökene izin verir oyunların görüntüleri, sesleri, yazı tiplerini, JSON'u ve yerel ayar dosyalarını izin vermeden yüklemesini sağlar allow-same-origin. ZIP kurulumu çapraz geçişleri ve yinelenen yolları reddeder, yürütülebilir sunucu dosyaları ve sınırlı sayım veya genişletilmiş boyut ihlalleri.

Telemetri ve gizlilik

  • Güncelleme kontrolleri, Yayıncıya gizliliği koruyan benimseme telemetrisi gönderebilir: yalnızca product_key, installed_version, channel, rastgele yerel olarak kalıcı installation_id ve telemetry_schema_version. Alan adı, URL, yönetici yok e-postalar, yollar, veritabanı ayrıntıları, kullanıcı sayıları, belirteçler veya rastgele ortam/yapılandırma değerler gönderilir. WEBBLOCKS_TELEMETRY=false'yi devre dışı bırakılacak şekilde ayarlayın; meta veri kontrolleri kurulum kimliği olmadan devam edin.
  • Ziyaretçi Raporları yol, zaman ve normalleştirilmiş yönlendirenin yer aldığı sayfa görüntüleme kayıtlarını tutar ana bilgisayar, UTM değerleri, cihaz kategorisi ve bot sınıflandırması. Onaya dayalı tam izleme ayrıca bir oturum anahtarını ve IP HMAC'yi de tutabilir; bunlar takma ad tanımlayıcılar, anonimlik garantisi değildir. Yeni grafikler ve sayfa ayrıntısı modelleri hiçbir ek tanımlayıcı veya genel izleme komut dosyası eklemeyin. planlanmış saklama, süresi dolmuş ayrıntıların yerini günlük site/yerel sayımlarla ve daha sonra alır bu sayıların geçerliliğini sona erdirir. Bkz. İşlemler.

Bir güvenlik açığını bildirme

GitHub Güvenlik Tavsiyeleri veya bakım sorumlusu iletişim bilgileri aracılığıyla özel olarak raporlayın SECURITY.md. Raporları 5 iş günü içinde kabul etmeyi hedefliyoruz gün ve sizinle bir açıklama zaman çizelgesini koordine edecek.

Eklenti Başlatma ve Kurtarma (1.94.0–1.94.2)

CMS tarafından yönetilen eklentilerin kurulumu, güncellenmesi ve etkinleştirilmesi sırasında aday paket, normal çalışma ortamında etkinleştirilmeden önce ayrı bir PHP sürecinde doğrulanır. Geçersiz kaynak kodu, sağlayıcı veya rota hataları, erken sonlanma ve zaman aşımı durumunda paket reddedilir; güncelleme reddedilirse çalışan paket korunur. Veritabanı kurulum hataları eklentiyi devre dışı bırakır ve verilerini korur. Çalışma sırasında kaynak kodu veya rota hatası oluşursa etkilenen eklenti karantinaya alınır ve kısmen kaydedilmiş rotalar kaldırılır.

/webadmin/plugin-recovery ekranı ve giriş sayfası, kurulu eklentilerin kaynak kodunu yüklemeden açılır. CMS 1.94.2, mevcut oturumlar dahil olmak üzere hesabın etkinliğini, yönetim paneline erişimini ve Super admin yetkisini denetler. Kurtarma işlemi hatalı eklentiyi devre dışı bırakabilir; önceki paket yalnızca veritabanı geçişi çalıştırılmamışsa geri yüklenebilir. Geri yükleme sırasında başlangıç doğrulaması yeniden yapılır ve önceki dosyalar yeniden yayımlanır. Normal giriş denetimleri ve CSRF koruması geçerli kalır. Bu koruma, yönetilen eklentilerin kurtarma yolunu kapsar; ana uygulamanın tüm sağlayıcılarını kapsamaz ve çalıştırılabilir PHP kodunu yalıtmaz. Bkz. Eklenti Sistemi.

Sistem Güncellemeleri API Yetkilisi (1.90.0)

Yükleme güncellemeleri, sistem erişimi olan etkin bir kullanıcının sahip olduğu, kurulum çapında bir sistem belirtecini gerektirir. system-updates.read ve system-updates.run ayrı tercihlerdir; ne kişisel jetonlar ne de site kapsamlı jetonlar bunları kullanamaz. Execution requires explicit approval of the installed version, target version, and checksum, with a durable idempotency receipt for uncertain responses. Bkz. Güncellemeler.