Güvenlik ve CSP
Content-Security-Policy
Bölüm başlığı “Content-Security-Policy”Sayfanız bir CSP gönderiyorsa widget için iki kaynağa izin vermeniz gerekir: yükleyici betiği (API origin’i) ve iframe (site origin’i):
Content-Security-Policy: script-src 'self' https://api.mirac-ozdemir.com; frame-src https://mirac-ozdemir.com| Direktif | Kaynak | Neden |
|---|---|---|
script-src |
https://api.mirac-ozdemir.com |
widget.js yükleyicisi. |
frame-src (veya child-src) |
https://mirac-ozdemir.com |
Hesaplayıcının çalıştığı embed sayfası. |
connect-src gerekmez: hesaplama iframe’in kendi içinde yapılır. Yükleyici sayfanıza satır içi (inline) betik veya stil eklemez; iframe’in stilleri CSSOM ile ayarlanır, bu yüzden unsafe-inline gerekmez.
Güvenlik modeli
Bölüm başlığı “Güvenlik modeli”- Mesaj güveni. Yükleyici bir mesajı yalnızca şu koşulların hepsi sağlanırsa kabul eder:
event.originsite origin’i,data.sourcemirac-ozdemir-widget,data.version1,data.idbilinen bir widget örneği veevent.sourceo örneğin iframe penceresi. Bir çerçeve başka bir widget’ı yeniden boyutlandıramaz veya taklit edemez. - DOM’a veri eklenmez. API’den ve iframe’den gelen veriler
textContent/DOM API’leriyle işlenir, HTML olarak ayrıştırılmaz; yük yalnızca olaydetail’i olarak size iletilir. - İzolasyon. Embed sayfası sizin sayfanıza göre farklı bir origin’dedir: sayfanızın içeriğini, çerezlerini veya depolamasını okuyamaz. Yükleyici de iframe’e hiçbir izin (
allow) vermez. - Sandbox. iframe’de betik, form ve açılır pencere açık; üst pencereyi yönlendirme (top navigation), indirme, modal diyaloglar ve pointer lock kapalıdır. Araç bağlantısı yeni sekmede normal şekilde açılır (
allow-popups-to-escape-sandbox). - Komut güveni (embed sayfası). Ters yönde embed sayfası, sayfanızdan gelen bir komutu yalnızca
event.source === window.parent, zarf host zarfı,idwidget’ın kendiid’si (aslanulldeğil) ve yük düzgün biçimliyse kabul eder. Bu komutlar yalnızca sunumu (tema, vurgu rengi, …) değiştirebilir, girdileri doldurabilir ve hesaplama başlatabilir; bilinmeyen türler yok sayılır. Yükleyici bunlarıtargetOriginolarak site origin’iyle gönderir. - Girdi doğrulama.
data-*öznitelikleri,data-input-*değerleri veupdate/setInputsargümanları katı izin listelerine göre doğrulanır (değer uzunlukları, alan adı deseni, 6 onaltılık haneli vurgu rengi, sabit tema/köşe/yoğunluk değerleri) ve URL parçaları kodlanır; bilinmeyen alanlar ve geçersiz değerler yok sayılır ya da kapsayıcı uyarıyla atlanır. - Yükleyicinin başlıkları. Yükleyici yanıtları
Content-Type: application/javascript; charset=utf-8,Access-Control-Allow-Origin: *,Cross-Origin-Resource-Policy: cross-originveContent-Security-Policy: default-src 'none'(yanıtın kendisi hiçbir şey yükleyemez) taşır. Önbellek adrese göre değişir:/widget.jsve/widget/v1.jsiçinCache-Control: public, max-age=3600; sürümlü/widget/v<semver>.jsiçinpublic, max-age=31536000, immutable;/widget/manifest.jsoniçinmax-age=300(o da origin’ler arası okunabilir). - Subresource Integrity. Değişmez yükleyici adresi, manifestteki
sha384-…özetiyle sabitlenebilir; dosya değişirse tarayıcı reddeder: Sürüm politikası. - Konsol mesajları. Yükleyici geçersiz seçenekleri İngilizce
console.warnile bildirir ([MiracOzdemirWidget] …).
Gizlilik
Bölüm başlığı “Gizlilik”- Widget sayfası site iskeletini ve Matomo analitiğini yüklemez.
- Hesaplama girdileri yalnızca hesaplamayı yapmak için API’ye gönderilir; widget bunları sizin sayfanıza
mo:resultolayında geri iletir, başka bir yere göndermez. - Widget, ziyaretçinin kişisel verilerini sizin sayfanızdan okumaz; çünkü origin izolasyonu bunu engeller.
- Sitenizin çerez/KVKK metninde, hesaplayıcının üçüncü taraf bir alan adından (
mirac-ozdemir.com) yüklendiğini belirtmeniz iyi bir uygulamadır.
Anonim embed kullanım sayımı
Bölüm başlığı “Anonim embed kullanım sayımı”Hangi araçların ne kadar gömüldüğünü görebilmek için embed sayfası, bir widget gösterildiğinde (embed-view) ve içinde bir hesaplama yapıldığında (embed-calculation) kendi API’mize anonim bir işaret (beacon) gönderir (POST /v1/public/tools/{toolId}/events). Bu, yükleyici için de düz iframe için de geçerlidir.
- Ne gönderilir: olay türü ve gömen sayfanın alan adı (örn.
example.com); referrer origin’inden alınır, küçük harfe çevrilir. Alan adı yoksa değer(direct)olur. - Ne saklanır: yalnızca araç, alan adı ve gün başına sayaçlar. IP adresi, kullanıcı aracısı (user agent), sayfa yolu, çerez, hesaplama girdisi veya sonucu saklanmaz.
- Sınırlar: günde 5.000’den fazla farklı alan adı
(other)altında toplanır. Sayaçlar, diğer kullanım istatistikleriyle aynı saklama süresinden sonra silinir. - Nerede görünür: toplu olarak, platformun yönetim paneli içgörülerinde (“Embeds” görünümü).
- Güvenilirlik: alan adı tarayıcının bildirdiği (referrer) bir değerdir; yani analitiktir, kanıt değildir; taklit edilebilir veya eksik olabilir.
Kendi gizlilik metniniz için: widget, ziyaretçilerinizin tarayıcılarının mirac-ozdemir.com (embed sayfası) ve api.mirac-ozdemir.com (yükleyici, hesaplama verisi ve sayaç işareti) adreslerine bağlanmasını sağlar; sayaçtan yalnızca sayfanızın alan adı, günlük olarak sayılarak tutulur.
Sorumluluk reddi
Bölüm başlığı “Sorumluluk reddi”Widget, aracın sorumluluk reddi notunu içinde gösterir ve kaldırmanıza izin vermez. Sonuçlar bilgilendirme amaçlıdır; vergi, hukuk veya finans danışmanlığı yerine geçmez.
Güvenlik açığı bildirme
Bölüm başlığı “Güvenlik açığı bildirme”Bir güvenlik sorunu fark ettiyseniz lütfen herkese açık bir yerde paylaşmadan önce bize ulaşın.