OW Consent — Dokümantasyon
WordPress'te eksiksiz rıza yönetimi: çok yargı bölgeli banner, izleyici engelleme, tarama aracı, yasal belgeler, kanıt defteri ve haklar portalı. Yazar: OptionWeb — Julien Daniel Eklenti sayfası: https://optionweb.dev/tr/addons/ow-consent/ Lisans: GPL-2.0-or-later Bu belgenin kapsadığı sürüm: 1.4.3
İçindekiler
- Genel bakış
- Kurulum
- Hızlı başlangıç
- On bir uyumluluk profili
- Çerez kategorileri
- Banner
- Otomatik engelleme
- İzleyici tarama aracı
- Yasal belge üreteci
- Rıza kayıt defteri
- Haklar portalı (DSAR)
- CCPA opt-out'u: “Do Not Sell or Share”
- Google Consent Mode v2
- IAB TCF v2.2
- Global Privacy Control
- Bölgesel tespit
- OW Forms entegrasyonu
- Yüzen düğme
- Kısa kodlar
- REST API
- Ayar referansı
- Sorun giderme
- SSS
Genel bakış
OW Consent, WordPress için bir rıza yönetimi paketidir. Zincirin tamamını kapsar: bir seçim sunmak, bu seçimi izleyicilere gerçekten uygulamak, kanıtını saklamak, seçimi açıklayan belgeleri yayımlamak ve veri sahiplerinin taleplerini almak.
On bir uyumluluk profili hazır gelir — GDPR'den CCPA'ya, Québec'in 25 sayılı Kanunu, Brezilya'nın LGPD'si ya da Hindistan'ın DPDP'si dahil. Etkin profil; rıza modelini (opt-in veya opt-out), Google Consent Mode varsayılan değerlerini, üretilen belgelerin metnini, yayımlanan hakları ve anılan denetim otoritesini belirler.
Her şey sitenizin içinde kalır. Eklenti tek bir dış servisle iletişim kurar — IAB Europe'un Global Vendor List'i — o da yalnızca varsayılan olarak kapalı gelen TCF modülünü etkinleştirirseniz. Telemetri yok, hesap yok, abonelik yok.
Tasarım gereği tam sayfa önbelleğiyle uyumlu
Geri kalan her şeyi yöneten mimari karar budur. Sunucunun ürettiği hiçbir şey rıza çerezine bağlı değildir. HTML tüm ziyaretçiler için aynıdır: izleyiciler herkes için etkisiz etiketlere dönüştürülür ve bunları tarayıcıda, kategori kategori, ilk render'dan önce çerezi okuyarak serbest bırakan bir JavaScript çalışma zamanıdır.
Pratik sonucu: LiteSpeed Cache, WP Rocket, Varnish ya da bir CDN, bir ziyaretçinin
seçimlerini bir başkasına sunamaz. Yalnızca gerçekten kişiye özel yanıtlar — bir hak
talebinin kimlik doğrulama sayfası, ziyaretçi verisi içeren REST yanıtları — açıkça
önbelleklenemez olarak işaretlenir. Önbelleklenebilir HTML'e hiçbir nonce da basılmaz:
banner, her yazma işleminden hemen önce no-store bir uç noktadan taze bir nonce alır.
Pakette gelenler
- Rıza banner'ı: dört konum, açık / koyu / otomatik tema, “Tümünü reddet” en az “Tümünü kabul et” kadar görünür, klavyeyle erişilebilir tercih paneli, tamamen çevrilebilir.
- Otomatik izleyici engelleme: betikler, satır içi kod parçacıkları, iframe'ler,
pikseller, kaynak ipuçları (
preconnect,dns-prefetch,preload), analitik/pazarlama stil dosyaları ve üçüncü taraf medyalar; 175 hazır ve düzenlenebilir imza temelinde. - İzleyici tarama aracı: kendi sayfalarınızın WP-Cron ile taranması,
Set-Cookiebaşlıklarının okunması, yalnızca yöneticilere gösterilen tarayıcı sondası ve taramanın gerçekte neyi kapsadığını her zaman söyleyen bir panel. - Yasal belge üreteci: on bir profil için gizlilik politikası ve çerez politikası, yargı bölgesinin dilinde; yasal bilgiler ile kullanım ve satış koşulları Fransızca.
- Rıza kayıt defteri: her eylem, HMAC ile zincirlenmiş bir tabloya eklenir; yürürlükteki profil, yayımlanmış belgelerin özeti ve gerçekte gösterilen banner'ın özeti ile birlikte.
- Haklar portalı (DSAR): kısa kodla gelen form, e-posta ile doğrulama, kimlik doğrulandığında başlayan 12.3 maddesi süresi, WordPress'in yerel dışa aktarıcı ve silicisine bağlanma.
- Google Consent Mode v2, IAB TCF v2.2, Global Privacy Control, bölgesel tespit, OW Forms entegrasyonu: her biri bağımsız olarak açılabilir.
owc/v1ad alanı altında eksiksiz bir REST API.
Yapmadıkları — karar vermeden önce okuyun
Hukuki bir konuda abartılı bir vaat, sizi de yayıncıyı da aynı ölçüde riske atar. Sınırlar, kodda yazdıkları haliyle şunlardır.
- Üretilen belgeler şablondur, hukuki danışmanlık değildir. Her belge bunu söyleyen bir uyarıyla biter ve bu uyarı varsayılan olarak açıktır. Belgelerinizi yayımlamadan önce bir uzmana okutun.
- TCF modülü, IAB Europe nezdinde kayıtlı bir CMP değildir. Kendinizin edinmesi gereken bir CMP ID ister, sağlayıcı düzeyinde hiçbir seçim sunmaz ve sağlayıcıların onun sinyalini reddetmesi meşrudur. TCF kapsamındaki reklam geliri sizin için önemliyse sertifikalı bir CMP kullanın.
- Kayıt defterinin kurcalamaya karşı kanıtlı olması koşulludur. Zincir, ancak imza anahtarı veritabanının dışında yaşıyorsa kanıt sayılır. Eklenti aksi durumu tespit eder, kendisi raporlar ve tersini iddia etmek yerine yönetim ekranında size söyler.
- Tarama aracı hiç JavaScript çalıştırmaz. HTML'inizin içerdiğini ve
Set-Cookiebaşlıklarınızın bıraktığını görür; bir etiket yöneticisinin çalışma zamanında enjekte ettiğini yalnızca oturum açmış yöneticilere ayrılmış bir sonda görür. - Varsayılan engelleme “üçüncü taraf olan her şey” değildir. Bilinmeyen bir üçüncü taraf betiğine varsayılan olarak izin verilir; varsayılan olarak engellenenler bilinmeyen iframe'lerdir. Engelleme, zenginleştirebileceğiniz imza kataloğuna dayanır.
- JavaScript olmadan hiçbir seçim kaydedilemez. Ziyaretçi bir
<noscript>bloğu görür ve zorunlu olmayan hiçbir şey yüklenmez, ama hiçbir şey de kaydedilmez. - Bölgesel tespitte ABD'de eyalet eyalet, Kanada'da vilayet vilayet ayrım yoktur: tüm
ABD toprakları
ccpaprofilini, tüm Kanadaquebecprofilini alır. - Yasal bilgiler ile kullanım ve satış koşulları yalnızca Fransızca vardır. Hedef dili Fransızca olmayan her yargı bölgesi için üreteç, uygun olmayan bir metin yayımlamak yerine bu iki belgeyi üretmeyi reddeder.
- Özel rol yoktur: yönetimin tamamı
manage_optionsyetkisini ister.
Bu liste, gizlenmiş bir yol haritası değil, bilinçli bir tercihtir. Uyumluluk konusunda, boşluklarını söyleyen bir araç, onları gizleyen bir araçtan iyidir.
Kurulum
.zip dosyasından
- https://optionweb.dev/tr/addons/ow-consent/ adresinden
ow-consent-1.4.3.zipdosyasını indirin - Eklentiler → Yeni Ekle → Eklenti Yükle
- Dosyayı seçin, Kur'a, ardından Etkinleştir'e tıklayın
FTP ile
Arşivi açın ve ow-consent klasörünü /wp-content/plugins/ içine bırakın, ardından
eklentiyi Eklentiler ekranından etkinleştirin.
Gereksinimler
- WordPress 6.2 veya üstü — bu bir öneri değil, başlatmayı reddetme koşuludur (aşağıya bakın)
- PHP 7.4 veya üstü
- MySQL 5.7+ / MariaDB 10.2+
- Tarama aracını, kayıt defteri saklama süresini, DSAR vade hatırlatmalarını veya TCF modülünü kullanıyorsanız çalışan bir WP-Cron
WordPress 6.2 güvencesi. 1.3.0'dan bu yana her tablo tanımlayıcısı,
wpdb::prepare()fonksiyonunun%iişaretçisiyle bağlanır; WordPress bunu ancak 6.2'den itibaren anlar. Daha eski bir çekirdekteprepare()boş bir dize döndürür, izleyici kataloğu sessizce boş bir kümeye çözülür ve banner ziyaretçiye gerçekleşmeyecek bir engelleme sözü vermeye devam ederdi. Bu yüzden eklenti başlatmayı reddeder ve hiçbir şeyin engellenmediğini, hiçbir rızanın kaydedilmediğini açıkça söyleyen bir hata mesajı gösterir.Requires at leastbaşlığı 6.2'nin altında etkinleştirmeyi zaten engeller, ama ne çalışan bir kurulumun çekirdek sürümünün düşürülmesini ne de FTP ile bırakılmış bir kopyayı kapsar.
Kurulanlar
Etkinleştirmede OW Consent dört tablo oluşturur:
| Tablo | İçerik |
|---|---|
{prefix}owc_ledger | Hash ile zincirlenmiş rıza kayıt defteri |
{prefix}owc_dsar | Hak talepleri |
{prefix}owc_scanner | İzleyici tarama aracının bulguları |
{prefix}owc_scripts | Engellemenin kullandığı imza kataloğu |
Beşinci bir tablo, {prefix}owc_form_links, kardeş eklenti etkinse OW Forms entegrasyonu
tarafından ayrıca oluşturulur (bkz. OW Forms entegrasyonu).
Etkinleştirme ayrıca şunları ekler:
- boş olarak tohumlanan
owc_settingsseçeneği — bilerek: siz hiçbir şey kaydetmediğiniz sürece tüm metinler, İngilizce varsayılanlardan gelir ve anında sitenin diline çevrilir; böylece eklentiyi etkinleştiren kişinin yerel ayarı veritabanına sabitlenmez; owc_versionseçeneği;- pakette gelen izleyici kataloğu (
data/tracker-catalog.json), 100'lük gruplar halindeINSERT IGNOREile eklenir ve sürüme özel bir tohumlama bayrağı taşır (owc_catalog_seeded_1.4.3); - etkinleştirmeden bir saat sonrasına planlanan günlük
owc_daily_maintenancegörevi.
Beş cron olayı daha, onları kullanan modüller tarafından kurulur. Eklentinin altı cron
kancası şunlardır: owc_scanner_run, owc_scanner_run_batch, owc_ledger_retention,
owc_tcf_refresh_gvl, owc_run_upgrade ve owc_daily_maintenance.
Çoklu sitede tablolar site başına oluşturulur, asla paylaşılmaz (wp_2_owc_ledger
vb.). Ağ genelinde etkinleştirme, ağda en fazla 200 site varsa tüm siteleri dolaşır;
üzerindeyse her site ilk isteğinde tembel olarak hazırlanır. Ağ etkinleştirmesinden sonra
oluşturulan bir alt site, wp_initialize_site kancasıyla hazırlanır.
wp-config.php içinde tanımlanacaklar
Bu sabitlerin hiçbiri zorunlu değildir, ama ikisi eklentinin ürettiği şeyin ispat gücünü değiştirir.
// Önerilir: kayıt defterinin imza anahtarını veritabanının dışına çıkarır.
define( 'OWC_LEDGER_KEY', 'bu siteye özgü, uzun ve rastgele bir dize' );
// Önerilir: standart WordPress salt'ları. Onlar olmadan WordPress salt'ları veritabanında
// saklar ve kayıt defteri, kendisini kurcalamaya karşı kanıtsız olarak bildirir.
define( 'AUTH_KEY', '…' );
define( 'AUTH_SALT', '…' );
// Site bir CDN, yük dengeleyici veya ters proxy arkasındaysa.
// Bu sabit olmadan CF-Connecting-IP, X-Forwarded-For ve X-Real-IP YOK SAYILIR
// ve yalnızca REMOTE_ADDR kullanılır — bu da hız sınırlaması açısından tüm
// ziyaretçilerinize aynı kimliği verir.
define( 'OWC_TRUSTED_PROXY', '198.51.100.0/24, 2001:db8::/32' );
// `OWC_TRUSTED_PROXIES` takma ad olarak kabul edilir; bir dize de bir dizi de olur.
// Yalnızca bölgesel tespit için: hangi ülke başlıklarının güvenilir olduğunu bildirir.
define( 'OWC_GEO_TRUSTED_HEADERS', 'cloudflare' ); // 'cloudflare'|'cloudfront'|'proxy'|'all'
define( 'OWC_BEHIND_CLOUDFLARE', true );
define( 'OWC_BEHIND_CLOUDFRONT', true );
OWC_LEDGER_KEY aynı zamanda bölgesel tespit çerezinin anahtarını türetmeye yarar. Tanımlı
değilse kayıt defteri anahtarı wp_salt('auth') değerine düşer.
Kimlerin erişimi var
Eklentinin tüm yönetim ekranları ve tüm yönetim REST rotaları manage_options yetkisini
ister. Ne özel bir rol ne de daha ince bir yetki vardır: eklenti ekranını birine açmak,
ona sitenin ayarlarını vermek demektir.
Güncelleme yolu
Eklenti şemasını asla anonim bir sayfa üzerinde canlı olarak taşımaz. Sürüm değiştiğinde
owc_version ve bir owc_pending_upgrade bayrağı hemen yazılır, ardından:
- istek AJAX dışı bir yönetim isteği, bir cron çalışması ya da bir WP-CLI komutuysa geçiş satır içi çalışır;
- değilse beş saniye sonrasına bir
owc_run_upgradeolayı planlanır.
admin-ajax.php anonim bir istek gibi ele alınır: burası herkese açık bir giriş noktasıdır.
Geçiş bir kilit altında çalışır (owc_upgrade_lock, 300 saniye sonra devralınır) ve
admin_init üzerindeki bir güvenlik ağı, WP-Cron'un kapalı olduğu siteleri yakalar. Sürüm
aynıysa toplam maliyet tek bir get_option() çağrısıdır.
Devre dışı bırakma ve silme
Devre dışı bırakmak tüm verileri korur ve yalnızca altı cron olayını temizler. Ağ genelinde devre dışı bırakmada tüm siteler 200'lük gruplar halinde dolaşılır — etkinleştirmenin aksine — çünkü kurulu bırakılmış bir cron asla kendiliğinden kaybolmaz.
Eklentiyi silmek uninstall.php dosyasını tetikler; bu da iki aşamada ilerler:
- Ayarınız ne olursa olsun her zaman: altı cron temizlenir ve
{prefix}owc_dsartablosu, hız sınırlaması transient'leriyle birlikte silinir. Üçüncü kişilere ait doğrudan kimlik belirtici kişisel veri içeren (e-posta adresi, ad, serbest metin) tek tablo budur; eklenti gittikten sonra saklama süresini hiçbir şey sınırlamaz ve hiçbir ekran bu taleplere yanıt vermeye, onları dışa aktarmaya ya da silmeye izin vermez. Saklamanız gereken talepleri eklentiyi silmeden önce dışa aktarın. - Yalnızca
delete_data_on_uninstallaçıkça etkinleştirilmişse:owc_ledger,owc_dsar,owc_scanner,owc_scriptsveowc_form_linkstabloları, adlandırılmış seçenekler,owc_önekli tüm seçenekler (transient'ler dahil) veowc_önekliusermetakayıtları silinir. Çoklu sitede ağ seçenekleri ana sitenin kararını izler.
Bu ayar varsayılan olarak kapalıdır: GDPR'nin 7.1 maddesinin istediği rıza kanıtı, eklentinin silinmesinden sağ çıkar.
Hızlı başlangıç
Etkinleştirmenin ardından yönetim kenar çubuğundaki OW Consent girişini açın. Eklentinin tamamı bu tek ekranda, on sekmede toplanmıştır: Dashboard, Banner, Compliance, Legal identity, Categories, Policies, Scanner, Tracker catalogue, Audit ledger, DSAR requests.
Bir kaydetme yalnızca açık olan sekmeyi ilgilendirir. Bu bilinçli bir tercihtir: her boole değerinin bir ikiz gizli alanı vardır ve formda bulunmayan bir anahtar “bu alan başka bir sekmede” demektir, asla “işaretsiz” değil. Bu olmasaydı bir sekmeyi kaydetmek diğer tüm sekmelerin ayarlarını ezerdi.
1. Uyumluluk profilinizi seçin
Compliance sekmesi. Profil; rıza modelini, Consent Mode varsayılanlarını, üretilen
belgeleri ve yayımlanan hakları belirler. Varsayılan: gdpr.
compliance_strict varsayılan olarak açıktır: engellemeyi yalnızca WordPress'e kayıtlı
betiklerin ötesine taşıyan da odur. Temanıza gömülü iframe'lerin, piksellerin ve betiklerin
de işlenmesini istiyorsanız açık bırakın.
2. Yasal kimliği doldurun
Legal identity sekmesi. Bu alanlar üretilen belgelerin hammaddesidir ve zorunlu bir alan boş olduğu sürece üretim reddedilir — sessiz bir başarısızlıkla değil, eksik anahtarların listesiyle birlikte.
Tüm belgeler için asgari: legal_company_name ve legal_company_email. Çerez politikası
dışındaki her belge için adres ve ülkeyi ekleyin. Yasal bilgiler için ayrıca telefonu,
yayın yönetmenini ve barındırıcının tüm iletişim bilgilerini ekleyin; Fransa, Belçika ve
Lüksemburg'da şirket türü ve sicil numarası da zorunlu hale gelir.
legal_dpa_authority alanını boş bırakın: denetim otoritesi, ülkenizden ve profilinizden
türetilir. Çok yargı bölgeli bir sitede bunu elle doldurmak, yanlış düzenleyiciyi anmak
demektir.
3. Kategorilerinizi gözden geçirin
Categories sekmesi. Altı kategori de varsayılan olarak kullanılabilirdir. Sitenizin
kullanmadıklarını kapatın: arayüzde olmayan bir kategori uyumluluk kazancı değildir, onu
serbest bırakacak hiçbir anahtar olmadan sonsuza dek engellenmiş bir kaynaktır — engelleme
o kaynağı marketing kategorisine devreder.
Etiketler size uyduğu sürece boş bırakın: o zaman sitenin dilini izlerler. Bir metni özelleştirdiğiniz anda o metin dili izlemeyi bırakır.
4. Banner'ı ayarlayın
Banner sekmesi. Konum, tema, düğmeler, etiketler, yenileme süresi.
Kaçırılmaması gereken iki nokta: banner_reject_all ayarını açık bırakın (“Reddet”,
“Kabul et” kadar basit ve görünür olmalıdır) ve kapatma çarpısını kapalı bırakın —
seçim yapmadan kapatmak zımni bir ret anlamına geldiği için varsayılanda yoktur. Açarsanız
çarpıya tıklamak sessiz bir kapatma değil, eksiksiz “Tümünü reddet” yolunu çalıştırır.
5. Belgelerinizi üretin
Policies sekmesi. Dört belge: çerez politikası, gizlilik politikası, yasal bilgiler, kullanım ve satış koşulları. Her biri sürümlenmiş bir WordPress sayfası olur ve bağlantısı ayarlara geri yazılır.
Önce önizleme olarak üretin, okuyun, sonra yayımlayın. Ve bir profesyonele okutun: her belgenin altındaki uyarı şeridi süs değildir.
6. Haklar portalını açın
Bir sayfa oluşturup içine [owc_dsar_form] yapıştırın. DSAR requests sekmesinde
dsar_email alanını doldurun: formun altında yayımlanan iletişim adresi ve bildirimlerin
alıcısı budur. Boş bırakılırsa eklenti legal_dpo_email, ardından admin_email değerine
düşer — ama admin_email herkese açık bir sayfada asla yayımlanmaz.
7. Halka açmadan önce doğrulayın
Kontrol paneli, on beş uyumluluk denetimi çalıştırır ve hataları uyarılardan ayırır: banner kapalı, “Tümünü reddet” yok, kapatma çarpısı açık, yasal kimlik eksik, haklar portalı kapalı, kayıt defteri kapalı, hiçbir politika bağlı değil, denetim otoritesi etkin profille çelişiyor (onu sıfırlayan bir “Fix this” düğmesiyle birlikte), site HTTPS'te değil, kategorilendirilmemiş izleyiciler var, süresi geçmiş DSAR talepleri var, tetiklenemeyen katalog kuralları var.
Sitenizin uyumlu olduğunu duyurmadan önce bu on beş satırı yeşile çevirin.
On bir uyumluluk profili
Uyumluluk profili kozmetik değildir. Hukuki modeli, arayüzü, teknik sinyalleri ve yayımlanan belgelerin içeriğini yönetir.
Liste
| Profil | Hedeflenen rejim | Model |
|---|---|---|
gdpr | GDPR + ePrivacy (AB/AEA) | Opt-in |
uk_pecr | UK GDPR + PECR (Birleşik Krallık) | Opt-in |
ch_nfadp | İsviçre nLPD'si | Opt-in |
quebec | 25 sayılı Kanun (Québec) | Opt-in |
lgpd | LGPD (Brezilya) | Opt-in |
popia | POPIA (Güney Afrika) | Opt-in |
pipl | PIPL (Çin) | Opt-in |
dpdp | DPDP Act 2023 (Hindistan) | Opt-in |
ccpa | CCPA / CPRA (Kaliforniya) | Opt-out |
us_generic | Genel ABD eyalet kanunları | Opt-out |
au | Privacy Act (Avustralya) | Opt-out |
Ayar: compliance_profile, varsayılan gdpr.
Opt-in, herhangi bir seçim yapılmadan önce yalnızca zorunlu kategorilerin verilmiş
sayıldığı anlamına gelir. Opt-out, ret gelene kadar her şeyin verilmiş sayıldığı
anlamına gelir. Üç opt-out profili ccpa, us_generic ve au'dur. JavaScript çalışma
zamanı, PHP ile tam olarak aynı kuralı uygular; böylece sunucu ile tarayıcı iki farklı
durum bildiremez.
Profilin gerçekte değiştirdikleri
| Değişen | Ayrıntı |
|---|---|
| Rıza modeli | Opt-in; ccpa, us_generic, au hariç |
| Consent Mode varsayılanları | Opt-out profilinde yedi sinyal de granted olur |
| Zorunlu “Do Not Sell or Share” bağlantısı | Yalnızca ccpa ve us_generic |
| Hukuken bağlayıcı GPC | Yalnızca ccpa ve us_generic — Avustralya açıkça dışarıda: opt-out rejimi, ama GPC'yi tanımıyor |
| TCF için “GDPR uygulanır” kapsamı | 27 AB ülkesi + IS, LI, NO + GB + CH, yani 31 kod |
| Üretilen belgenin dili | quebec → Fransızca; lgpd → Portekizce; ülkesi FR, BE veya LU olan gdpr → Fransızca; geri kalan her şey → İngilizce |
| Anılan denetim otoritesi | Profil bazlı tablo, GDPR için ülkeye göre inceltilir |
| Yayımlanan haklar listesi | Profil başına yazılmış bir liste, madde atıflarıyla |
| İngilizce belgenin “çerez rejimi” gövdesi | Metin, aktarım kapsamı ve güvenceler profil bazında farklıdır |
Profile göre üretilen belgeler
Gizlilik politikası ve çerez politikası on bir profilin tamamı için vardır. Şablonlar şu
sırayla çözülür, ilk bulunan kazanır: <tür>_<profil>_<dil>, sonra <tür>_<profil>, sonra
<tür>_<dil>, sonra <tür>.
Çerez politikasının İngilizce gövdeleri profil bilinçlidir: uygulanacak kural, aktarım
kapsamı, güvenceler ve panel metni gdpr, uk_pecr, ch_nfadp, au, pipl, dpdp,
ccpa ve us_generic için farklıdır; ilgili atıflarla birlikte (2002/58 sayılı direktifin
md. 5(3), PECR reg. 6, LTC md. 45c(b) ve nLPD md. 19/6(7)(b), APP 8, PIPL md. 24, DPDP Act
2023'ün 5/6/7/9(3)/16 bölümleri, §1798.121 ve Cal. Code Regs. tit. 11 §7025,
VCDPA/CPA/CTDPA/UCPA/TDPSA).
Anılan denetim otoritesi
| Profil | Anılan otorite |
|---|---|
gdpr, ülke FR | CNIL |
gdpr, ülke BE | APD-GBA |
gdpr, ülke LU | CNPD |
gdpr, ülke DE | BfDI |
gdpr, diğer AEA ülkeleri | Genel ifade (“yetkili denetim otoritesi”) |
uk_pecr | ICO |
ch_nfadp | PFPDT / FDPIC |
quebec | Commission d'accès à l'information |
lgpd | ANPD |
ccpa | California Privacy Protection Agency |
popia | Information Regulator (South Africa) |
pipl | Cyberspace Administration of China |
dpdp | Data Protection Board of India |
au | OAIC |
us_generic | Eyaletinizin Attorney General'ı |
legal_dpa_authority alanını değiştirdiyseniz sizin girdiğiniz değer bu türetmeye üstün
gelir.
Yargı bölgesi kapsamının sınırları
- AEA'da yalnızca dört ülkenin adı geçen bir otoritesi var (FR, BE, LU, DE). İspanya, İtalya veya Hollanda'daki bir GDPR sitesi genel bir ifade yayımlar.
- ABD'de eyalet eyalet ayrım yok.
us_genericprofili vardır ve kendi VCDPA/CPA/CTDPA/UCPA/TDPSA metinlerini taşır, ama hiçbir otomatik tespit onu atamaz: elle seçilir. - Kanada'da vilayet düzeyinde ayrım yok.
- Yalnızca üç belge dili: Fransızca, İngilizce, Portekizce. Gövdeler WordPress'in çeviri mekanizmasından geçmez — bu bilinçlidir: bir hukuki belge tek dilli olmalı ve dili, yöneticinin yerel ayarını değil, yargı bölgesini izlemelidir.
- Yasal bilgiler ile kullanım ve satış koşulları: yalnızca Fransızca şablonlar. Üreteç,
owc_policy_templatefiltresiyle kendi gövdenizi sağlamadığınız sürece diğer tüm hedef diller için net biçimde reddeder.
Çerez kategorileri
Kanonik liste
Altı kategori, bu görüntülenme sırasıyla; necessary her zaman başta:
| Slug | Hazır etiket | Hazır açıklama |
|---|---|---|
necessary | Necessary | Strictly required for the site to function (cart, login, language preferences). Cannot be disabled. |
functional | Functional | Enhance the experience (chat, embedded videos, maps). Without them some features may not work. |
analytics | Statistics | Help us understand how you use the site (anonymously). No personal data is shared for commercial purposes. |
marketing | Marketing | Enable us to show you ads and content tailored to your interests on other sites. |
preferences | Preferences | Remember your interface choices (layout, saved filters). |
social | Social & embeds | Allow embedded social content (YouTube, Instagram, X) to load. |
Yukarıdaki değerler, saklanabilir İngilizce varsayılanlardır. Türkçe bir sitede ziyaretçi çevirisini görür — çeviri mekanizması için aşağıya bakın.
Kullanılabilirlik
cat_<slug>_available ayarı, kategori başına bir tane. Altısı da varsayılan olarak
kullanılabilirdir. Eski cat_<slug>_enabled anahtarı hâlâ yedek olarak okunur, geçiş
yapılmaz.
preferences ve social kategorileri kullanılabilir gelir; çünkü tohum kataloğu YouTube,
Spotify, SoundCloud, Instagram, X ve Facebook'u social olarak sınıflandırır: kategori
arayüzde olmasaydı bu gömüler, opt-in imkânı olmadan kalıcı olarak engelli kalırdı.
necessary zorunludur: kapatılamaz (ePrivacy md. 5.3). Bu yüzden yönetimde
kullanılabilirlik anahtarı yoktur, yalnızca bir etiketi ve bir açıklaması vardır.
Çeviri mekanizması
cat_<slug>_label ve cat_<slug>_desc ayarları. Saklanan değer yalnızca boş değilse ve
İngilizce varsayılandan farklıysa olduğu gibi döndürülür; aksi halde çeviri çıkar.
Bilinmesi gereken sonuç: siz hiçbir şeyi özelleştirmediğiniz sürece sitenin dilini değiştirmek kategorilerin dilini de değiştirir. Kendi metninizi girdiğiniz andan itibaren o metin, yazdığınız dilde sabitlenir. Aynı kural banner metinleri için de geçerlidir.
necessary kategorisinin çevrilmiş açıklaması iki dizeden kurulur: ikincisi eklentinin
kendi çerezlerini adlandırır — owc_consent (13 aya kadar) ve owc_geo (24 saat, yalnızca
bölgesel tespit açıkken yazılır).
Google Consent Mode v2 eşlemesi — bağlayıcı
Bu, eklentinin tek doğruluk kaynağıdır: banner, engelleme ve bootstrap bu tabloyu okur, dolayısıyla birbirlerinden ayrışamazlar.
| Kategori | Consent Mode v2 sinyalleri |
|---|---|
necessary | security_storage, functionality_storage |
functional | functionality_storage, personalization_storage |
analytics | analytics_storage |
marketing | ad_storage, ad_user_data, ad_personalization |
preferences | personalization_storage |
social | ad_storage, ad_user_data |
Önemli ayrıntı: siteniz functional kategorisini sunuyorsa functionality_storage,
necessary listesinden çıkarılır. Aksi halde, isteğe bağlı bir kategoriye ait olmasına
rağmen her türlü rızadan önce verilmiş olurdu.
TCF eşlemesi — yalnızca açıklayıcı
functional → functional, analytics → measurement, marketing → advertising,
preferences → personalization, social → social_media.
Bunlar görüntüleme etiketleridir. TCF tarafındaki bağlayıcı eşleme, IAB amaçlarının sayısal kimliklerinden oluşan tablodur; IAB TCF v2.2 bölümünde anlatılır. Hiçbir TCF davranışını bu beş etikete bağlamayın.
Bir kategori ortadan kalkarsa ne olur
Bir katalog kuralı, sitenizin artık sunmadığı bir kategoriyi gösteriyorsa — örneğin social
kategorisini kapattıysanız — engelleme, kaynağı marketing kategorisine, o da yoksa
kullanılabilir ilk isteğe bağlı kategoriye devreder. Bu normalleştirme olmasaydı kaynak,
onu serbest bırakacak hiçbir anahtar olmadan sonsuza dek engelli kalırdı.
Banner
Ne zaman görünür
Banner wp_footer üzerinde öncelik 5 ile render edilir, kaynakları da wp_enqueue_scripts
üzerinde kuyruğa alınır. Şu koşullardan biri doğruysa hemen çıkar: yönetim bağlamı, RSS
beslemesi, robots.txt veya banner_enabled kapalı. wp_head hiç tetiklenmemişse de
çıkar — wp_head() çağırmayan bir tema aksi halde etkisiz ve stilsiz bir işaretleme
alırdı.
HTML tüm ziyaretçiler için aynıdır. Paneldeki tüm kutular sunucu tarafında KAPALI olarak
render edilir, sonra istemci tarafında çerezden doldurulur. <html data-owc="given|none">
işaretini ilk render'dan önce senkron olarak koyan JavaScript'tir; CSS de banner'ı yalnızca
data-owc="none" durumunda gösterir.
Bilinmesi gereken sonuç: JavaScript'i olmayan bir ziyaretçi banner'ı hiç görmez, dolayısıyla
kapatamayacağı bir modalın ardında asla kilitli kalmaz. Onun yerine, tercihlerinin
kaydedilemeyeceğini ve bir seçim yapılmadığı sürece zorunlu olmayan hiçbir çerezin
yüklenmediğini açıklayan bir <noscript> bloğu görür.
Konumlar ve tema
| Ayar | Değerler | Varsayılan |
|---|---|---|
banner_position | bottom-bar, bottom-card, center-modal, top-bar | bottom-bar |
banner_style | auto, light, dark | auto |
Yalnızca center-modal konumu role="dialog", aria-modal="true", karartılmış bir arka
plan, bir odak tuzağı ve Esc tuşu desteği alır. Diğer üç konum bir role="region"'dır: Esc
yakalanmaz (tema kendi davranışını korur) ve ilk render'da odak çalınmaz — çalınsaydı
klavye kullanıcısı tüm atlama bağlantılarının ötesine itilirdi.
Koyu palet, light değerini açıkça bildiren bir temayı ezmemek için korumalarla birlikte
prefers-color-scheme: dark altında uygulanır. Sitenin teması paleti CSS değişkenleriyle
yönetebilir: --owc-paper-tint, --owc-ink, --owc-smoke, --owc-fog, --owc-ui,
--owc-accent, --owc-accent-strong, --owc-accent-darker.
Uygulama ayrıntıları: banner için z-index 99998, arka plan için 99997; iOS çentikleri için
env(safe-area-inset-*) desteği; üst konumda WordPress yönetim çubuğunun altına otomatik
kaydırma.
Düğmeler
| Ayar | Varsayılan | Etkisi |
|---|---|---|
banner_accept_all | true | “Tümünü kabul et” gösterilir |
banner_reject_all | true | “Tümünü reddet” gösterilir |
banner_preferences | true | “Özelleştir” gösterilir |
banner_close_x | false | Kapatma çarpısı gösterilir |
banner_show_logo | true | Site logosu gösterilir |
“Tümünü kabul et” ile “Tümünü reddet” aynı biçimlendirme sınıfını paylaşır: aynı arka plan, aynı kenarlık, aynı yazı kalınlığı, aynı iç boşluk. Bu, CNIL / EDPB gerekliliğine (03/2022 sayılı kılavuz) verilen yanıttır: reddetmek, kabul etmek kadar basit ve görünür olmalıdır.
Kapatma çarpısı
Varsayılan olarak kapalıdır, çünkü bir kapatma çarpısı zımni bir ret anlamına gelir. Bilinmesi gereken üç davranış:
banner_close_xkapalıyken çarpı işaretlemede vardır amahiddenniteliği taşır ve CSS onu tamamen kaldırır: ne görünür, ne odaklanabilir, ne de ekran okuyuculara duyurulur.- Açıkken çarpıya tıklamak eksiksiz “Tümünü reddet” yolunu çalıştırır, asla sessiz bir kapatma değil.
- Yalnızca tek bir durumda çalışma zamanı tarafından açığa çıkarılır ve yeniden etiketlenir: bir ret hiçbir şekilde kaydedilemediğinde. O zaman artık bir şeyi reddetmez, bildirimi kaldırır — ve bu kapatma bir seçim olarak sayılmaz. Kararı sunucu tarafından reddedilen bir ziyaretçi, kapatamayacağı bir banner'la baş başa bırakılmaz.
İlk katman
- Başlık (
text_title) ve mesaj (text_message). Mesaj, eklentinin zengin HTML kabul eden tek alanıdır;<a href target rel>ile sınırlı birwp_ksesile render edilir. - Gizlilik politikası bağlantısı:
link_privacy_policy, ayar boşsa WordPress'te bildirilen politika sayfasına düşer. - Çerez politikası bağlantısı:
link_cookie_policy, yedeksiz. - Veri sorumlusunun adı:
legal_company_name, yoksa sitenin adı; “Veri sorumlusu: …” biçiminde gösterilir (md. 13(1)(a)). - Logo: temanın
mediumboyuttaki özel logosu, yoksa site simgesi.
Tercih paneli
Kullanılabilir her kategori için, adlandırılmış bir role="group" içinde bir satır.
- Zorunlu bir kategori, anahtar olmadan “Always active” metin rozetini gösterir.
- İsteğe bağlı bir kategori,
aria-checked,aria-labelledbyvearia-describedbytaşıyan bir<button role="switch">gösterir. Durum;aria-checked, imlecin konumu ve görünür bir On/Off kelimesiyle taşınır — asla yalnızca renkle değil. - Küçük ekranda dokunma hedefi 44 piksele büyütülür (WCAG 2.2 AA, ölçüt 2.5.8).
- Panelin eylem çubuğu altta
stickydurur; böylece liste kayarken “Seçimlerimi kaydet” erişilebilir kalır.
TCF modülü etkinse iki blok daha görünür: erişilebilir TCF amaçları ve bildirilmiş özel özellikler. Bkz. IAB TCF v2.2.
Rızanın yenilenmesi
| Ayar | Varsayılan | Sınırlar |
|---|---|---|
consent_renewal_months | 12 | 0 ile 13 arası |
consent_policy_hash_check | true | — |
0, “bir daha asla sorma” demek değildir. 0 değeri 13 aya dönüştürülür ve 13 ay katı
tavandır (CNIL 2020-091 sayılı karar). Bu yüzden fiili süre her zaman 1 ile 13 ay
arasındadır; çerezin süresini, sunucu tarafındaki geçerlilik denetimini ve üretilen
belgelerde yayımlanan süreyi yöneten de aynı değerdir. Kaynak kodda görünen OWC_COOKIE_TTL
sabiti yalnızca bir yedektir.
consent_policy_hash_check, belgeleriniz değiştiğinde rızayı yeniden sorar: çerez, bağlı
politika sayfalarının bir özetini taşır ve bir farklılık banner'ı yeniden açar. Hiçbir
sayfa bağlı değilken özet boş dizeye eşittir — “bilinmiyor” ile “değişti” ayrımını yapmayı
ve boş bir karşılaştırma yüzünden tüm siteyi yeniden rahatsız etmemeyi sağlayan da budur.
Metinler
Yedi yuva; hepsi varsayılanda boştur ve dolayısıyla otomatik olarak çevrilir: text_title,
text_message, text_accept_all, text_reject_all, text_preferences, text_save ve
yüzen düğme için floating_button_label.
Yönetimde her alan, çevrilmiş varsayılanını yer tutucu olarak gösterir: boş bırakmak, ziyaretçinin dilini izleyen varsayılanı korur.
owc_banner_texts filtresi bu metinleri kodla değiştirmeye izin verir. Ek yuvalar kabul
edilir; beceriksiz bir geri çağırma banner'ı boşaltamasın diye skaler olmayan veya boş
değerler ayıklanır.
Seçim gerçekte nasıl kaydedilir
JavaScript çalışma zamanı katı ES5'tir — ok işlevi yok, şablon dizesi yok — ki uygulama içi gömülü tarayıcılarda ve eski WebView'lerde çalışsın. Yazma sırası bilinmeye değer, çünkü hata mesajlarının çoğunu açıklayan odur.
- Kaynağın yeniden çapalanması. REST URL'leri WordPress yapılandırmasından gelir.
Ziyaretçileriniz başka bir ana bilgisayarda geziniyorsa (www'ye karşı apex, takma ad,
önizleme alan adı,
Hostbaşlığını yeniden yazan bir proxy), bu URL çapraz kaynak olur ve WordPress 200 yanıtı verirken tarayıcıSet-Cookiebaşlığını saklamayı reddeder. Bu yüzden çalışma zamanı, PHP'nin verdiği yolu gerçekte gezilen kaynağa yeniden çapalar. - Nonce. Yazmadan hemen önce
GET /owc/v1/nonceüzerinden taze alınır, asla önbelleklenebilir HTML'e gömülmez,X-OWC-Noncebaşlığıyla gönderilir. Alma işlemi 4 saniyeyle sınırlıdır ve eksik, boş ya da ulaşılamaz bir nonce yazmayı asla engellemez ve ziyaretçiye bildirilmez. - İstek gövdesinde açıkça verilen
page_url; böylece kayıt defteri satırı, bir eklentinin, bir meta-referrer'ın ya da bir proxy'nin silebileceğiRefererbaşlığına bağlı kalmaz. AbortControllerile 15 saniyelik takılma koruması: geç kalan bir POST ikinci bir satır yazmasın diye istek yalnızca yok sayılmaz, iptal edilir.- Başarının tanımı. POST ancak ve ancak şu koşullarda başarılıdır: yanıt
ok, gövde ayrıştırılabilir JSON,json.ok === trueve çerez tarayıcıda geri okunabiliyor. 200 ile sunulan bir önbellek sayfası, bir kenar doğrulaması ya da bir WAF sayılmaz. - Sunucu
cookie_set: falseyanıtı verirse çalışma zamanı, dönen parametrelerle çerezi kendisi yazar ve sonra geri okur. Başarısızlık yine başarısızlıktır: hiçbir şey yayımlanmaz, hiçbir şey serbest bırakılmaz. - Tek bir yeniden gönderim, yalnızca kodu
owc_bad_nonce,rest_cookie_invalid_nonceya darest_nonce_invalidolan bir 403 durumunda ve yalnızca alınan nonce gerçekten farklıysa. - Çalışma zamanının yayımladığı şey, sunucunun sakladığı şeydir: sunucunun reddettiği kategoriler yerel durumdan çıkarılır.
POST başarılı olmadığı sürece hiçbir şeyin maskesi kaldırılmaz, hiçbir şey serbest bırakılmaz ve “granted” değerinde hiçbir Consent Mode sinyali yayımlanmaz.
Hata sınıflandırması
Çalışma zamanı dokuz nedeni ayırır ve her birinin kendi görünür mesajı vardır: network,
refused, ratelimit, unexpected, timeout, browser, config, cookie,
owc_cookie_not_persisted. HTTP durumu ve sunucu kodu öğeye yazılır
(data-owc-status, data-owc-code) ve bir kez console.warn ile günlüklenir — asla
görünür metne dönüştürülmez. Böylece bir destek ekran görüntüsü, ağ izine gerek kalmadan
nedeni adlandırır.
Banner'ın JavaScript API'si
window.OWCBanner.show(); // banner modunda açar
window.OWCBanner.hide(); // kapatır
window.OWCBanner.openPreferences(); // tercih panelini açar
window.OWCBanner.openDnsmpi(); // paneli marketing, social ve preferences
// önceden KAPALI olacak şekilde açar (CCPA girişi)
window.OWCBanner.reset(); // çerezi istemci tarafında siler, bir geri çekme
// gönderir, ardından sayfayı yeniden yükler
window.OWCBanner.acceptCategory( 'social' ); // yalnızca sunucu gerçekten sakladıysa
// true ile çözülen bir promise döndürür
<head> içinde öncelik 1 ile daha hafif bir bootstrap basılır ve window.OWConsent
nesnesini açar: .config, .categories, .geo, .profile, .optOut, .state,
.has(cat), .refresh(), .paint(), .gcmSignals(state). Yapılandırması
owc_bootstrap_config ile filtrelenebilir — ama oradaki her şey herkese açıktır ve
önbellek tarafından paylaşılır: oraya asla ziyaretçiye özel veri koymayın.
Paneli kendi sayfalarınızdan açmak
Üç yol, hepsi eşdeğer:
#owc-preferences(veya#owc-dnsmpi) URL parçası; yüklemede vehashchangeolayında dikkate alınır;owc-open-preferencessınıfını ya dadata-owc-openniteliğini taşıyan herhangi bir öğe;- “Do Not Sell” davranışını zorlamak için
data-owc-dnsmpi="1"niteliği.
Her değişiklikte, gönderilen yük ayrıntı olarak eklenmiş bir owc:consent-changed olayı
yayınlanır. Bu olayı bootstrap, yüzen düğme, CCPA çalışma zamanı ve TCF modülü dinler; siz de
dinleyebilirsiniz.
Banner'ın sınırları
- Her şey
wp_head()vewp_footer()çağrılarına bağlıdır: bunları çağırmayan bir tema hiçbir şey almaz. window.fetchvewindow.Promiseolmadan hiçbir yazma mümkün değildir vebrowserhatası gösterilir.- Bir rıza sunucu tarafında kaydedilip tarayıcı tarafında saklanmayabilir (site adresinin gezilen ana bilgisayardan farklı olması, depolamanın engellenmesi, dolu çerez kavanozu). Çalışma zamanı bu durumu tespit eder, başarı saymayı reddeder, özel bir mesaj gösterir ve durumu bir sonraki yazmada sunucuya bildirir.
- Banner'ın kısa kodu yoktur: ya her yerde görünür ya da hiçbir yerde.
Otomatik engelleme
Bir seçimi gerçek bir etkiye dönüştüren modül budur. İzleyici taşıyan etiketleri, herhangi bir rızadan önce ve herkes için yeniden yazar; serbest bırakmayı da tarayıcıdaki çalışma zamanına bırakır.
İki mod, tek ayar
compliance_strict, varsayılan olarak açık.
- Kapalı (esnek mod): yalnızca
script_loader_tagfiltresi bağlanır. Başka bir deyişle yalnızcawp_enqueue_script()ile kaydedilmiş betikler yeniden yazılır. Temaya gömülü bir<script>, bir gömü, bir iframe, bir<img>pikseli: hiçbirine dokunulmaz. - Açık (katı mod): filtreye ek olarak bir çıktı tamponu belgenin tamamını yakalar ve REST
API üzerinden render edilen işaretleme de işlenir. Yönetimde, istek bir
admin-ajax.phpisteğiyse, ön yüze de hizmet eden yanıtları (“daha fazla yükle”, filtrelenmiş arşivler) ayrı bir tampon kapsar — ama yalnızca işleyicinin kendisiContent-Type: text/htmlbildirmişse.
Asla tamponlanmayanlar
Katı tampon şunlar için hemen çıkar: yönetim, AJAX istekleri, beslemeler, robots.txt,
trackback'ler, cron, favicon'lar, REST istekleri, JSON istekleri, özelleştirici önizlemesi,
site haritaları ve wp-login.php, wp-register.php, wp-signup.php, xmlrpc.php,
wp-cron.php, wp-trackback.php giriş noktaları — bunlar URL'nin alt dizesi olarak değil,
betiğin tam adı üzerinden test edilir. Ham HTML'e ihtiyaç duyan tarama aracı istekleri için
de çıkar.
Beş geçiş
Yeniden yazma, bir DOM ayrıştırıcısıyla değil, kalibre edilmiş düzenli ifadelerle yapılır. Tümünü üç güvence çevreler: 8 MB'ı aşan bir belge olduğu gibi döndürülür, PCRE motorunun başarısızlığı belgeyi olduğu gibi döndürür ve sonuç özgün boyutun yarısından küçükse özgün belge döndürülür. Başka bir deyişle engellemenin arıza modu “engellemesiz sunulan sayfa”dır, asla “bozuk sayfa” değil.
Geçiş 0 — maskeleme. HTML yorumları, <style> ve <textarea> blokları, sonraki hiçbir
desen içeride eşleşmesin diye kontrol karakterine dayalı işaretçilerle değiştirilir.
Geçiş 1 — <script>. Karar sırası:
- zaten işlenmiş → dokunulmaz;
- eklentinin kendi betiği → dokunulmaz;
type="text/plain"ya da JS olmayan tür (ld+json,importmap,x-template) → dokunulmaz;- URL şu niteliklerde aranır:
src,data-src,data-rocket-src,data-lazy-src,data-litespeed-src,data-cfsrc— yani performans eklentilerinin nitelikleri de kapsanır; - ana bilgisayar izin listesindeyse → dokunulmaz; izleyiciye benzemeyen birinci taraf kaynak → dokunulmaz;
ana bilgisayar + yolbiçimi üzerinden kataloğa göre eşleştirme; birdata:ya dajavascript:URL'si çözülür ve satır içi gövde gibi değerlendirilir;necessarysınıfına giren bir kural asla engellenmez (Stripe.js, reCAPTCHA, Turnstile, cdnjs…): onu engellemek hiçbir uyumluluk kazandırmaz ve çağıran kod parçasını bozar;- hiçbir eşleşme yok →
blocker_unknown_script_policy, varsayılanallow; - aksi halde
type="text/plain"olarak yeniden yazılır;data-owc-cat,data-owc-vendor,data-owc-srcve — özgün tür özelse (örneğinmodule) — geri getirilen betik bozulmasın diyedata-owc-typeeklenir.
Satır içi gövdeler önce inline_signature türündeki katalog kurallarıyla, sonra sabit kodlu
on dört çapalı imzayla karşılaştırılır: fbq(, _fbq.push, gtag(, dataLayer.push(,
ga('…, _gaq.push, _paq.push, hjid, clarity(, ttq.load|track|page, snaptr(,
twq(, lintrk(, pintrk(. Açık istisna: tek başına bir gtag('consent', …), yani
başka işaretçi taşımayan bir varsayılan Consent Mode bildirimi, çalıştırılmaya devam eder.
Geçiş 2 — <iframe>. Aynı URL nitelikleri, artı data-original ve data-srcset.
Birinci taraf ya da izin listesi → dokunulmaz. necessary → dokunulmaz, aksi halde captcha
içeren bir form gönderilemez hale gelirdi. Eşleşme yoksa →
blocker_unknown_iframe_policy, varsayılan block. Engellenen iframe src="about:blank"
olur ve ilgili kategoriyi serbest bırakan bir “Kabul et: <sağlayıcı>” düğmesi içeren
görsel bir yer tutucuyla sarılır.
Geçiş 3 — <img>, yalnızca izleme pikselleri. Önemli kural: tek başına bir katalog
satırı bir görseli etkisizleştirmeye asla yetmez. Görsel kataloğa uyuyor ama kategorisi ne
analytics ne de marketing ise — bir görsel CDN'i, bir gravatar servisi, bir yazı tipi
barındırıcısı — olduğu gibi bırakılır; aksi halde bir izleyici yerine sitenin medyaları
silinirdi. Yalnızca etiket buluşsalı engelleyebilir: bilinen on bir toplama noktası
(facebook.com/tr, px.ads.linkedin.com, ct.pinterest.com, bat.bing.com,
analytics.twitter.com, t.co/i/adsct, tr.snapchat.com, analytics.tiktok.com,
google-analytics.com/collect, googleads.g.doubleclick.net, pixel.quantserve.com) ya da
1×1 piksellik üçüncü taraf bir görsel. O zaman src saydam bir GIF ile değiştirilir ve
tembel bir yükleyici özgün URL'yi geri getirmesin diye URL taşıyan tüm nitelikler
silinir.
Geçiş 4 — <link>. blocker_block_resource_hints ayarına bağlıdır, varsayılan
true. Yalnızca kataloğa girmiş ana bilgisayarları işler, hiçbir bilinmeyeni değil.
- Kataloğa girmiş bir üçüncü tarafa yönelik kaynak ipuçları (
preconnect,dns-prefetch,prefetch,prerender,preload,modulepreload) ertelenmez, silinir: bir ipucu TCP+TLS bağlantısı açar ve ziyaretçinin IP'sini ve TLS parmak izini ifşa eder; sonradan geri getirilecek bir şey de yoktur. analyticsveyamarketingsınıfındaki bir stil dosyası etkisizleştirilir.- Google Fonts ve
functionalsınıfındaki diğer yazı tipi barındırıcılarına asla dokunulmaz: onları etkisizleştirmek, hiçbir uyumluluk kazancı olmadan tüm sitede yedek yazı tipiyle bir metin verir.
Geçiş 5 — <object>, <embed>, <source>, <video>, <audio>. Varsayılan engelleme
asla yoktur: yalnızca kataloğa girmiş bir üçüncü taraf işlenir. autoplay ve preload
nitelikleri kaldırılır.
“Birinci taraf” sayılanlar
Site URL'si, WordPress URL'si, içerik URL'si, includes URL'si, çoklu sitede bunların ağ
karşılıkları ve yükleme klasörünün kökü. Karşılaştırmada www. kaldırılır. /wp-content/
veya /wp-includes/ ile başlayan her yol, ana bilgisayarı ne olursa olsun birinci
taraftır; bu, CDN yeniden yazımlarını kapsamak içindir. HTTP olmayan şemalar (data:,
blob:, javascript:) asla birinci taraf değildir.
Karşı istisna: gtag, gtm.js, analytics, pixel, fbevents, hotjar, matomo,
piwik veya clarity içeren bir URL sitenin kendi ana bilgisayarında bile işlenir.
Kendi sunucusunda barındırılan bir GTM ya da Matomo'yu ve birinci taraf proxy'leri yakalayan
budur.
Serbest bırakma çalışma zamanı
<head> içinde öncelik 2 ile basılır. JSON yapılandırması yalnızca çerez adını ve izlenen
ana bilgisayar listesini içerir — ziyaretçiye bağlı hiçbir şey içermez.
- Durum okuma:
owc_consentçerezi, en fazla üç geçişle, kararlı hale gelene kadar çözülür; çünkü 1.4.3'ten önce yazılan çerezler iki kez kodlanıyordu. - Dinamik enjekte edilen betiklerin koruması:
HTMLScriptElement.prototype.srcsetter'ı vesetAttributesarmalanır.s.src = 'https://www.googletagmanager.com/gtm.js?id=…'ataması yapan birinci taraf bir yükleyici yakalanır ve öğe çalışmadan önce işaretlenir. İzlenen liste yirmi ana bilgisayardan oluşur:googletagmanager.com,google-analytics.com,googleadservices.com,googlesyndication.com,doubleclick.net,connect.facebook.net,static.hotjar.com,script.hotjar.com,clarity.ms,cdn.matomo.cloud,analytics.tiktok.com,snap.licdn.com,sc-static.net,static.ads-twitter.com,bat.bing.com,s.pinimg.com,cdn.segment.com,js.hs-scripts.com,cdn.amplitude.com,cdn.mxpnl.com. Listede olmayan her şey rahatsız edilmeden geçer. İzin listenizdeki ana bilgisayarlar, liste basılmadan önce bu listeden çıkarılır. - Belge sırasına göre yeniden enjeksiyon. Geri getirilen harici bir betik,
onloadya daonerrorolayına kadar kuyruğu bloke eder; ulaşılamayan bir sağlayıcı geri kalanı kilitlemesin diye en fazla 5 saniye beklenir.asyncniteliği yalnızca başlangıçta varsa uygulanır — aksi haldecreateElementile oluşturulan bir betik zorla eşzamansıza çevrilirdi ve yapılandırma kodu kendi kütüphanesinden önce çalışırdı. Geri getirilen satır içi bir betik için, belgeyi silmesin diyedocument.writegeçici olarak yönlendirilir. - Rızanın geri çekilmesi: uygulanmış bir kategori açıkça
falsedeğerine geçerse çalışma zamanı sayfayı yeniden yükler. Çalışmış bir betik bellekten kaldırılamaz (GDPR md. 7.3). Yükte yalnızca bulunmayan bir kategori geri çekme sayılmaz. - Bir
MutationObserver, yüklemeden sonra enjekte edilen işaretlemeyi (AJAX, tembel bölümler) yeniden tarar. - Engellenmiş bir gömünün düğmesine tıklamak
OWCBanner.acceptCategory()çağrısını yapar; banner API'si yoksa gömü yerel olarak ve hiçbir şey kalıcılaştırılmadan serbest bırakılır.
İmza kataloğu
{prefix}owc_scripts tablosu. Pakette gelen data/tracker-catalog.json dosyası,
71 farklı sağlayıcıyı kapsayan 175 satır içerir:
| Dağılım | Ayrıntı |
|---|---|
| Hedefe göre | 110 URL deseni, 65 çerez adı |
| Türe göre | 172 metin parçası, 3 düzenli ifade |
| Kategoriye göre | necessary 55, marketing 37, functional 37, analytics 36, social 10 |
Sütunlar: pattern, pattern_type (host, regex, inline_signature), match_target
(url veya cookie), name, vendor, category, privacy_policy_url, gcm_signal,
tcf_vendor_id, retention_days.
Bilinmesi gereken iki davranış:
match_target = 'cookie'satırları engelleme tarafından asla kullanılmaz. Yalnızca üretilen belgelerdeki çerez tablosuna hizmet ederler. Onları URL'nin alt dizesi olarak karşılaştırmak, sitelerin JavaScript'ini bozan şeyin ta kendisiydi.- Bir URL'yi hedefleyen, altı karakterden kısa ve nokta içermeyen
hosttürü bir desen reddedilir: “fr” ya da “IDE” desenleri “frame.js” ve “provider.js” ile eşleşirdi.
Katalog, nesne önbelleğinde (1 saat) ve bir transient'te (12 saat) önbelleklenir. Boş bir
sonuç asla önbelleklenmez. Her yazma, bu önbellekleri boşaltan owc_catalog_updated
eylemini tetikler.
Tracker catalogue sekmesi kural eklemeye, değiştirmeye, silmeye ve aramaya izin verir; ayrıca “yalnızca tetiklenemeyen kurallar” filtresi vardır: boş ya da görünmez desen, derlenmeyen veya felaket düzeyinde geri izleme yapan düzenli ifade, bir URL için fazla kısa ve noktasız desen, artık var olmayan kategori. Bu tanı PHP'de yapılır, çünkü bir ifadenin derlenip derlenmediğini yalnızca PCRE motoru söyleyebilir.
Engelleme ayarları
| Ayar | Varsayılan | Değerler |
|---|---|---|
compliance_strict | true | boole |
blocker_unknown_script_policy | allow | allow, block |
blocker_unknown_iframe_policy | block | allow, block |
blocker_block_resource_hints | true | boole |
blocker_allowlist | '' | satır başına bir ana bilgisayar |
Genişletme noktaları
// blocker_allowlist'e ek olarak asla engellenmeyecek ana bilgisayarlar.
add_filter( 'owc_blocker_allowlist', function ( array $hosts ) {
$hosts[] = 'cdn.is-ortagim.example';
return $hosts;
} );
// Doğrulamadan önceki katalog satırları.
add_filter( 'owc_scripts_catalog', function ( array $rows ) {
$rows[] = array(
'pattern' => 'tracker.example.com',
'pattern_type' => 'host',
'match_target' => 'url',
'name' => 'Örnek',
'vendor' => 'Örnek A.Ş.',
'category' => 'analytics',
);
return $rows;
} );
OWC_Blocker::block_html_fragment( $html ) genel metodu, çıktı tamponundan geçmemiş bir
parçaya engellemeyi uygular.
Engellemenin sınırları
compliance_strictolmadan yalnızca WordPress'in kuyruğa aldığı betikler işlenir.- Bilinmeyen bir üçüncü taraf betiğine varsayılan olarak izin verilir. Gerçek engelleme kataloğa ve satır içi imzalara dayanır — onları zenginleştirin.
- JavaScript ile enjekte edilen betiklerin koruması yalnızca yirmi ana bilgisayarı kapsar; birinci taraf kodla enjekte edilen, listede olmayan bir izleyici geçer.
functionalsınıfındaki stil dosyaları (web yazı tipleri) bilerek geçirilir.<img>içinde kataloğa girmiş amaanalyticsya damarketingdışında sınıflandırılmış bir izleyici etkisizleştirilmez.- Medyalar (
object,embed,source,video,audio) varsayılan olarak asla engellenmez: yalnızca kataloğa girmiş bir üçüncü taraf işlenir. - 8 MB'ı aşan bir belge, bir PCRE başarısızlığı ya da içeriğin %50'sinden fazlasının kaybı, hiçbir engelleme yapılmadan sunulan bir sayfa verir; sessizce.
- Rızanın geri çekilmesi sayfanın tamamen yeniden yüklenmesine yol açar.
İzleyici tarama aracı
Tarama aracı, sayfalarınızın gerçekte neyi yüklediğinin envanterini çıkarır. Varsayılan olarak kapalıdır: Scanner sekmesinden açın.
Üç tespit kaynağı
Her bulgu kendi kaynağını ve “engelleme buna müdahale edebilir mi” bilgisini saklar.
1. Sunulan HTML. Tarama aracı kendi sitenizin URL'lerinden bir örneklem alır ve
işaretlemeyi okur: <script src> ve <script data-owc-src> — yani zaten engellenmiş
betikler de görülür —, satır içi imzalar, <iframe>, harici stil dosyaları ve URL'sinde
1x1, pixel, track, beacon veya impression geçen görseller. Hiç JavaScript
çalıştırılmaz: bir etiket yöneticisinin çalışma zamanında enjekte ettiği, bu geçiş için
görünmezdir.
2. Set-Cookie başlıkları. Sunucu taramasının ispatlayabildiği tek çerezler
bunlardır; bir tarayıcı sondasının asla göremeyeceği HttpOnly çerezler dahil. Bunlar
engellenemez olarak işaretlenir: istemci tarafındaki engellemede hiçbir şey, sunucunun
gönderdiği bir çerezi tutamaz. Eklentinin kendi çerezleri yok sayılır.
3. Tarayıcı sondası. Yalnızca manage_options yetkisine sahip, oturum açmış bir
kullanıcı için ve yalnızca tarama aracı açıksa alt bilgide basılır. Yüklemede
document.cookie içeriğinin fotoğrafını çeker, DOM mutasyonlarını izler — bir etiket
yöneticisinin enjekte ettiğini yakalayan budur —, istemci tarafında yazılan çerezler için
document.cookie değerini her 5 saniyede bir sorgular ve gözlemlerini her 2 saniyede bir ve
beforeunload olayında gönderir. Sondayı taşıyan yanıt önbelleklenemez olarak işaretlenir.
Kodda kabul edilen sınır: bir yönetici genellikle her şeyi çoktan kabul etmiştir. Dolayısıyla sonda, rıza öncesi durumu değil, rıza sonrası durumu tarif eder.
Tarama
URL kuyruğu sayfaları değil şablonları kapsayacak şekilde kurulur: önce çekirdek URL'ler (ana sayfa, statik ana sayfa, yazılar sayfası ve bağlı dört politika sayfası), ardından aileye göre sırayla (round-robin) geçiş — en fazla 30 sayfa, 15 yazı, herkese açık her özel içerik türünden 5, 3 kategori ve 3 etiket. Bu sıralı geçiş olmasaydı birbirine neredeyse özdeş otuz sayfa bütçenin tamamını yer ve WooCommerce şablonlarına hiç ulaşılamazdı.
owc_scanner_urls filtresi URL eklemeye izin verir, ama sonuç yeniden sitenin ana
bilgisayarıyla sınırlandırılır: tarama aracı alan adınızın dışına asla çıkmaz.
Her istek şu koşullarla yapılır: yönlendirmeler elle izlenir (en fazla iki sıçrama, her
sıçrama sitenin ana bilgisayarına karşı yeniden test edilir), yanıt 2 MB ile sınırlanır, bir
önbellek sayfası okunmasın diye Cache-Control: no-cache, no-store başlığı ve benzersiz bir
URL parametresi eklenir, kullanıcı aracısı OW-Consent-Scanner/<sürüm> olur. HTML olmayan
bir yanıt başarısızlık değil, atlanmış sayılır.
Engellemenin çekilip ham HTML'i göstermesi için X-OWC-Scanner başlığında bir atlatma
sırrı gönderilir. Sabit zamanda karşılaştırılır ve sıradan bir ziyaretçi seçeneğin
okunmasını bile tetiklemesin diye başlık en başta test edilir.
Bütçe, kilit, kaldığı yerden devam
| Kısıt | Değer |
|---|---|
| Çalıştırma başına URL | scanner_max_urls, varsayılan 25, sınırlar 1–500 |
| İstek başına zaman aşımı | scanner_timeout, varsayılan 8 sn, sınırlar 1–60 |
| Grup başına süre bütçesi | max_execution_time − 10 sn, yoksa 45 sn, 5 ile 60 sn arasında sınırlı |
| Çalıştırma kilidi | 15 dakika |
| Kuyruğun ömrü | 6 saat |
Bütçe tükenirse bir dakika sonrasına devam planlanır ve tarama kaldığı yerden sürer. Bir tarama sürerken ikinci bir başlatma “zaten bir tarama sürüyor” yanıtını verir. Kısa devre: hiçbir sayfa okunmadan üç istek başarısız olursa tarama, yirmi iki URL daha için süresini yakmak yerine durur — bu, tipik olarak HTTP loopback'i engellenmiş bir sitenin durumudur.
Tanınan satır içi imzalar
Yirmi bir etikette gruplanmış yirmi üç arama dizesi: gtag('config', gtag('event',
gtag('js', gtm.start, ga('create', ga('send', fbq('init', fbq('track',
_paq.push, (h.hj=h.hj, clarity('init', clarity.ms/tag, mixpanel.init,
amplitude.init, amplitude.getInstance, _linkedin_partner_id, snaptr('init',
ttq.load, pintrk("load", pintrk('load', rdt('init', criteo_q.push, _etmc.push.
Yinelenenleri ayıklama anahtarı, gövdenin özeti değil, imzanın kendisidir: gerçek bir gtag ya da Pixel kodu sayfaya özgü değerler içerir, bu da sayfa başına bir satır anlamına gelirdi.
Geri besleme döngüsü: bulgu → katalog → engelleme
Tarama aracını yararlı kılan nokta budur. Bir izleyiciyi sınıflandırmak, engelleme kataloğuna bir kural yazar. Bir bulgunun kategorisine tıklamak üç şey yapar: kategoriyi satıra yazar, elle verdiğiniz kararı hatırlar ve karşılık gelen kuralı oluşturur. Her tam taramanın sonunda, kataloğun sınıflandıramadıkları için aynı işlem toplu olarak yapılır.
Dönüştürme kuralları:
cookietüründe bir bulgu, çerez adı üzerindematch_target = cookiekuralına dönüşür;inline_scripttüründe bir bulgu, yalnızca özgün arama dizesi bulunabilirse bir kural yazar. Bulunamazsa hiçbir kural yazılmaz: “Google gtag (config)” etiketinden kurulmuş bir kural sonsuza dek ölü olurdu ve bulgunun adıyla eşleşerek onu sonsuza dek “kapsanmış” gösterirdi;- aksi halde, alan adı boşsa reddedilen bir
hostkuralı yazılır.
Elle verdiğiniz kararlar ayrı saklanır (en fazla 500) ve her yeni gözlemde yeniden uygulanır; çünkü “onaylandı” bayrağı aynı zamanda “bir katalog kuralı eşleşti” anlamına gelir ve dolayısıyla “yönetici karar verdi” bilgisini tek başına taşıyamaz. “Sınıflandırılmamış” olarak yeniden işaretlemek girdiyi siler: bu gerçek bir geri alma.
Katalog, en uzun desen önce karşılaştırılır; böylece geniş bir kural
(google-analytics.com) sizin yazdığınız daha kesin kuralı (www.google-analytics.com)
ezmez.
Planlama, uyarılar, saklama
scanner_frequency ayarı hourly, twicedaily, daily ve weekly değerlerini kabul eder
— ama yönetim ekranı yalnızca kurulumunuzun gerçekten tanıdığı tekrarları önerir. Varsayılan:
weekly. Tarama aracını kapatmak iki olayı da planlamadan çıkarır.
İki ayrı e-posta, asla ikisi birden değil:
- Sınıflandırılmamış izleyiciler — yalnızca gerçekten yeni tanımlayıcılar için gönderilir, 500 girdiyle sınırlı bir hafızayla.
- “Tarama bu siteyi okuyamadı” — hata imzası başına haftada bir mesajla sınırlıdır. En ağır arıza modu budur, çünkü hiçbir şey okumayan bir tarama hiçbir bulgu üretmez, dolayısıyla birinci türden hiçbir uyarı da çıkmaz.
Alıcı: scanner_alert_email, yoksa sitenin yönetim adresi.
Saklama: 90 gün. 90 gündür yeniden görülmeyen bulgular, yalnızca bir tarama bittiğinde değil, en az bir sayfa okunur okunmaz silinir.
Kapsam paneli
Scanner sekmesinin en önemli bölümü burasıdır ve üretilen belgelerdeki uyarı kutusunu da besler. Her zaman şu sorulara yanıt verir:
- daha önce hiç tarama başlatıldı mı?
- sonuncusu bitti mi, yoksa süre bütçesi yüzünden mi kesildi?
- kaç sayfa gerçekten alındı (kuyruktan çıkarılan değil)?
- kaç sayfa alınamadı ve ilk hata neydi?
- bir tarayıcı daha önce hiç bir şey bildirdi mi, yoksa hiç JavaScript gözlemlenmedi mi?
- yeniden görülmeyen bir izleyicinin kaybolduğu pencere nedir?
Hiçbir sayfaya ulaşamayan bir tarama, temiz bir sonuç olarak değil, bir başarısızlık olarak sunulur. Bu bulgular üzerine kurulu bir çerez politikası yayımlamadan önce okumanız gereken panel budur.
Scanner sekmesi
Üç kart (tespit edilen izleyiciler, sınıflandırılmamışlar, son tarama ve bir sonraki
çalıştırma), kapsam paneli, bir “şimdi tarama başlat” düğmesi, planlama formu, ardından
bulgu listesi: kategoriye göre filtreler, metin araması, öğe türüne göre filtre (script,
inline_script, iframe, stylesheet, pixel, cookie, link, preconnect), duruma
göre filtre, CSV dışa aktarımı, 25'lik sayfalama. Tek tek veya toplu sınıflandırma — toplu
seçicinin ilk öğesi boş ve devre dışıdır; böylece yanlışlıkla gönderilen bir form genel bir
sınıf değişikliğine dönüşmez.
Tarama aracı ayarları
| Ayar | Varsayılan | Sınırlar |
|---|---|---|
scanner_enabled | false | boole |
scanner_frequency | weekly | hourly, twicedaily, daily, weekly |
scanner_max_urls | 25 | 1–500 |
scanner_timeout | 8 | 1–60 |
scanner_probe_mode | admins | admins, off |
scanner_alert_email | '' | e-posta adresi |
Bilinmesi gereken:
scanner_probe_modebu sürümde kullanılmıyor. Kod bunu açıkça belirtir — sondanın basılma koşulu artık bu ayarı okumaz ve yalnızcascanner_enableddeğerine bakar.offdeğerini kaydetmek, değeri sondayı kapatmadan saklar. Sondayı gerçekten durdurmak için tarama aracını kapatın.
Tarama aracının sınırları
- Sunucu taraması hiç JavaScript çalıştırmaz. Sonda olmadan, bir etiket yöneticisinin enjekte ettikleri envanterde yer almaz.
- Sonda yalnızca oturum açmış yöneticilere ayrılmıştır ve onu sıradan bir ziyaretçi için çalıştıracak hiçbir mod yoktur: bu, kendi ön bilgilendirmesini gerektirirdi.
Set-Cookiebaşlığıyla bırakılan bir çerez tespit edilir ama engellenemez.- Tarama alan adının dışına asla çıkmaz ve varsayılanda 25 URL ile sınırlıdır: büyük bir site asla bütünüyle kapsanmaz.
- HTTP loopback'in engellendiği bir sunucuda (ön üretim HTTP kimlik doğrulaması, güvenlik duvarı) tarama hiçbir şey okumaz.
- 90 gündür yeniden görülmeyen bir bulgu kaybolur ve dolayısıyla çerez politikasından da çıkar.
- Tarama aracı WP-Cron'a bağlıdır:
DISABLE_WP_CRONtanımlı ve sistem cron'u olmayan bir sitede planlı tarama tetiklenmez.
Yasal belge üreteci
Dört belge
| Tür | İçerik | Mevcut diller |
|---|---|---|
cookie_policy | Çerez politikası | Fransızca, İngilizce, Portekizce |
privacy_policy | Gizlilik politikası | Fransızca, İngilizce, Portekizce |
legal_notice | Yasal bilgiler | yalnızca Fransızca |
terms | Kullanım ve satış koşulları | yalnızca Fransızca |
Üretilen her belge, meta verilerle sürümlenmiş bir WordPress sayfasıdır:
_owc_policy_type, _owc_policy_version (her üretimde artar), _owc_policy_hash (HTML'in
SHA-256 özeti), _owc_policy_generated_at, _owc_policy_profile, _owc_policy_lang,
_owc_policy_manual_edit.
Üretimden sonra bağlantı, karşılık gelen ayarlara geri yazılır (link_cookie_policy,
link_privacy_policy, link_legal_notice, link_terms) ve bir gizlilik politikasının
yayımlanması WordPress'te bildirilen politika sayfasını günceller.
Yayından önce iki kilit
Kilit 1 — zorunlu alanlar. Üretim, boşluklu maddeler yayımlamak yerine boş anahtarların listesiyle reddedilir.
| Belge | İstenen alanlar |
|---|---|
| Tümü | legal_company_name, legal_company_email |
| Çerez politikası hariç | + legal_company_address, legal_country |
| Yasal bilgiler | + legal_company_phone, legal_publication_director, legal_host_name, legal_host_address, legal_host_phone |
| Yasal bilgiler, ülke FR / BE / LU | + legal_company_legal_form, legal_company_reg_number |
Kilit 2 — dil. Üreteç, yargı bölgesinin kullanmadığı bir dilde yazılmış bir belgeyi yayımlamayı reddeder. Önizlemede belge kırmızı bir uyarı şeridiyle çıkar; yayında ise net bir ret vardır. Policies sekmesinde, etkin tür ve profil için hiçbir şablon yoksa üretim düğmesi görünüp sürekli başarısız olmak yerine gizlenir.
Dil çözümü
| Profil | Belgenin dili |
|---|---|
quebec | Fransızca |
lgpd | Portekizce |
legal_country ∈ {FR, BE, LU} olan gdpr | Fransızca |
| Geri kalan her şey | İngilizce |
Zorunlu uyarı
policy_disclaimer açık olduğu sürece — ve varsayılan olarak açıktır — her belge, metnin
otomatik üretilmiş bir şablon olduğunu ve yayımlanmadan önce nitelikli bir profesyonele
okutulması gerektiğini söyleyen, üretim tarihini ve eklenti sürümünü taşıyan bir blokla
biter. Bunu ancak sonuçlarını bilerek kapatın.
İzleyici tablosu — dürüstlük kuralları
Çerez politikasında yayımlanan tablo, üçüncü taraf bir veritabanından değil, sizin tarama tablonuzdan gelir. Gösterdiğini beş kural yönetir.
- Tazelik penceresi: yalnızca son 90 günde yeniden görülen bulgular yayımlanır. Bir geçiş uygulanmadığı için son gözlem sütunu henüz yoksa, izleyicisi olan bir sitede “izleyici yok” yayımlamak yerine pencere yok sayılır — eksik ifşa, bir hukuki belgenin asla başarısız olmaması gereken tek yöndür.
- Tablonun başında bir uyarı kutusu, tarama aracının kapsam panelinden türetilir: hiç tarama başlatılmamış, hiç sayfa okunmamış, tarama kesilmiş, N URL başarısız, JavaScript etkinken hiç gözlem yok, N günlük pencere. Eksik bir tarama, tamamlanmış bir envanter gibi yayımlanmaz, ifşa edilir.
- Sınıflandırılmamış izleyiciler gizlenmez: kendi bölümleri vardır. Kimsenin incelemediği izleyiciler bunlardır.
- Bir
Set-Cookiebaşlığında gözlemlenen bir çerez ayırt edici bir işaret taşır; sunucu tarafından bırakıldığını ve hiçbir istemci engellemesinin onu tutamayacağını açıklayan bir notla birlikte. Bu yüzden rızaya bağlıymış gibi sunulmamalıdır ve sınıflandırılmamış izleyicilerin yalnızca rızadan sonra bırakıldığını söyleyen madde, ilgili istisnayı taşır. - Sorumlunun adı ve politikasının bağlantısı katalogdan gelir, yalnızca bir URL'yi hedefleyen kurallar için. Çerez adı desenleri dışarıdadır: hukuki bir belgede, kanıt olmadan kimin veri işlediği iddia edilmez.
Sitenin çerezleri ve yayımlanan süreler
“Bu sitenin bıraktığı çerezler” bölümü eklentinin kendi çerezlerini listeler: owc_consent
(süresi yenileme ayarından türetilir), TCF açıksa euconsent-v2, bölgesel tespit açıksa
owc_geo, owc_gpc (oturum süresi), owc_gpc_notice (5 dakika), artı WordPress'in
oturum ve ayar çerezleri.
Saklama süreleri tablosu, sayılarını gerçek ayarlardan alır: ledger_retention_days,
retention_form_data_days, retention_dsar_days ve rızanın yenilenme süresi. Süs olsun
diye hiçbir değer yayımlanmaz. Rıza çerezinin süresi, çerezin kendisiyle aynı hesaptan
türetilir; bu da 0 aylık bir ayarın “asla” değil, “13 ay” olarak yayımlanmasını garanti
eder.
Faaliyet türünün tespiti (kullanım ve satış koşulları)
Kullanım ve satış koşulları 21 bölümden oluşur; satıcı/hizmet sağlayıcı, ürün/hizmet, teklif/sipariş geçişleri ve faaliyet türüne özgü maddeler içerir.
legal_business_type (auto, vitrine, rental, ecommerce, services, saas,
content) doğruluk kaynağıdır. Değeri auto olduğunda bir buluşsal yöntem siteyi
inceler — WooCommerce'in varlığı, açık kayıt, abonelik eklentileri, fiyat sayfası, hizmet
sayfaları, ardından son elli yayımlanmış içerikteki anahtar kelime yoğunluğu — ama verdiği
karar yayımlanan bir belgeye asla basılmaz: yalnızca isteğe bağlı maddeleri seçmeye yarar.
Fransız mevzuatına yapılan atıflar yalnızca legal_country FR ise eklenir. Belçika'nın
kendi atıfları vardır (CDE md. VI.45 §1er, md. VI.47, Tüketici Arabuluculuk Servisi);
Lüksemburg ve Québec nötr bir ifade alır. Doğrulanmamış bir metni anmak, çare değil, hatanın
kendisi olurdu.
Diğer davranışlar
- Belgenin tarihi, belgenin yerel ayarına göre biçimlendirilir. İlgili çeviri paketi
kurulu değilse biçim
gg/aa/yyyyolarak değişir: Fransızca bir belge “4 September 2026” ile açılamaz. - Elle düzenleme tespiti: saklanan içerik artık özetine uymuyorsa, üzerine yazmadan önce bir revizyon kaydedilir ve ekranda, revizyonlara bağlantı veren “elle yapılan değişiklikler değiştirildi” rozeti gösterilir.
- Üreteç asla geri adım attırmaz: yayımlanmış bir sayfa, “yayımla” kutusu işaretsiz olsa bile yayımda kalır ve yeniden adlandırdığınız bir başlık ya da kalıcı bağlantı yeniden üretimden sağ çıkar.
- Alt bilgi menüsüne ekleme:
auto_footer_menu_inject, varsayılan olarak kapalı. Eklenti, açık bir talep olmadan herkese açık sitenizi değiştirmez. Açtığınızda tanınan konumlar:footer,footer-menu,footer_menu,footer-1,footer_1,secondary,legal.
Genişletme noktaları
// Şablonun ham gövdesi, {{değişkenler}} hâlâ yerinde.
add_filter( 'owc_policy_template', function ( $html, $type, $profile ) {
return $html;
}, 10, 3 );
// Şablona enjekte edilen değişkenler.
add_filter( 'owc_policy_vars', function ( array $vars, $type, $profile ) {
return $vars;
}, 10, 3 );
// Değişkenleri değiştirilmiş, nihai HTML.
add_filter( 'owc_policy_html', function ( $html, array $vars ) {
return $html;
}, 10, 2 );
owc_policy_template ile kendi gövdenizi sağlamak dil kilidini devre dışı bırakır: kendi
metnini sağlayan bir site, dilinin sorumluluğunu da üstlenir. Fransızca olmayan yasal
bilgiler yayımlamanın resmî yolu budur.
Önceden üretilmiş dört blok, ayrılmış değişkenler olarak kullanılabilir:
{{__trackers_table__}}, {{__categories_list__}}, {{__retention_table__}},
{{__jurisdictional_rights__}}. Tüm değişkenler kullanıldıkları bağlamda zaten
kaçışlanmıştır. Üçüncü taraf bir şablonun yeniden kullanabileceği üç genel metot vardır:
OWC_Policies::build_cookie_table(), build_data_retention_table() ve
render_first_party_cookies().
REST rotaları
| Metot | Yol | Parametreler | Erişim |
|---|---|---|---|
POST | /owc/v1/policies/generate | type (zorunlu), publish (boole, varsayılan false) | manage_options |
GET | /owc/v1/policies/preview | type (zorunlu) | manage_options |
Önizlemenin HTML'i, döndürülmeden önce wp_kses_post() süzgecinden geçer.
Üretecin sınırları
- Bunlar şablondur, hukuki danışmanlık değil. Okutun.
- Yasal bilgiler ile kullanım ve satış koşulları yalnızca Fransızca vardır. Diğer her yargı bölgesi, kendi gövdenizi sağlamadığınız sürece dil kilidine takılır.
- Yalnızca üç dil: Fransızca, İngilizce, Portekizce.
- AEA'da dört ülkenin adı geçen bir otoritesi vardır; diğerlerinde genel bir ifade.
- İzleyici tablosu ancak taramanız kadar değerlidir — ve belge bunu söyler.
- Üreteç sınıfı yaklaşık 440 KB hukuki şablon taşır: yalnızca üç giriş noktasından biri gerçekten çağrıldığında tembel olarak yüklenir.
Rıza kayıt defteri
Kayıt defteri, GDPR'nin 7.1 maddesine verilen yanıttır: kişinin rıza gösterdiğini ispatlayabilmek. Varsayılan olarak açıktır.
Tablo
{prefix}owc_ledger, tüm tarihler UTC:
| Sütun | Tür | İçerik |
|---|---|---|
id | bigint | Birincil anahtar |
created_at | datetime | UTC zaman damgası |
visitor_token | char(32) | Tarayıcının takma adlı token'ı, 32 onaltılık karakter |
event | varchar(20) | accept_all, reject_all, save_preferences, withdraw, auto, gpc_opt_out |
categories | varchar(255) | İzin verilen kategorilerin listesi |
profile | varchar(20) | Eylem anında yürürlükte olan uyumluluk profili |
source | varchar(60) | banner, preferences, footer_link, api, auto |
ip_pseudonymous | varchar(45) | Kırpılmış IP |
ua_hash | char(64) | User-agent'ın tuzlanmış özeti |
page_url | varchar(500) | Eylemin gerçekleştiği sayfa |
prev_hash | varchar(128) | Önceki satırın özeti |
row_hash | varchar(128) | Bu satırın özeti |
policies_hash | char(64) | Yürürlükteki belgelerin özeti |
banner_revision | varchar(40) | Gerçekte gösterilen banner'ın özeti |
plugin_version | varchar(20) | Yazma anındaki eklenti sürümü |
Son üç sütun, ziyaretçinin yalnızca neyi işaretlediğini değil, ne gördüğünü de yeniden kurmayı sağlar.
Zincir
Her satır, kendi içeriğinin ve önceki satırın özetinin uzunluk önekli kanonik bir serileştirmesi üzerinden HMAC ile imzalanır. Genesis, 64 sıfırdan oluşan bir dizidir. Yazma, son kayıt üzerinde bir satır kilidiyle bir işlem içinde yapılır: eşzamanlı yazmaları gerçekten sıraya sokan ve zincirin çatallanmasını engelleyen bu kilittir. İkinci bir siper olarak MySQL adlandırılmış kilidi elden geldiğince alınır: reddedilirse ekleme sürer ve bunu izleyebilmeniz için bir eylem tetiklenir.
Değerler imzalanmadan önce kırpılır; böylece imzalanan değer, saklanan değerin tam kendisidir.
Kurcalamaya karşı kanıt konusunda dürüstlük
Eklenti, imza anahtarının kaynağını kendisi belirler:
| Kaynak | Koşul | Sonuç |
|---|---|---|
constant | OWC_LEDGER_KEY tanımlı | Kurcalamaya karşı kanıtlı |
wp-config | AUTH_KEY ve AUTH_SALT tanımlı, boş değil, birbirinden farklı ve varsayılan ifadeyi içermiyor | Kurcalamaya karşı kanıtlı |
database | Diğer durumlarda | Kanıtsız |
Üçüncü durumda WordPress salt'ları veritabanında saklar: veritabanına erişebilen herkes zinciri yeniden imzalayabilir. Eklenti bunu doğrulama sonucunda bildirir ve açık açık söyleyen bir yönetim uyarısı gösterir. Anahtarın geri döndürülemez bir özeti saklanır; bu da bir salt rotasyonunu bir yeniden yazımdan ayırmayı sağlar.
Kurulum bölümünün OWC_LEDGER_KEY tanımlamayı önermesinin nedeni budur.
Doğrulama
Audit ledger sekmesindeki “Verify the chain now” düğmesi — ya da
GET /owc/v1/ledger/verify rotası — zincirin tamamını 500 satırlık gruplar halinde dolaşır.
Üç imza şeması tanınır: mevcut kanonik şema, daha eski bir tarihsel şema ve ilk sürümlerden kalma anahtarsız bir şema. Sonuncusu, veritabanına sahip herkesin yeniden hesaplayabileceği bir özet üretir: asla geçerli sayılmaz, ayrıca sayılır ve bir kopma olarak bildirilir. Anahtarsız bir özet kanıt değildir.
Bildirilen kopmalar: hash_mismatch, chain_break, bad_genesis, unkeyed_rows,
table_emptied, tail_truncated, head_mismatch, count_mismatch.
Sonuç şunları taşır: ok, total, checked, table_total, broken_at, breaks,
break_count, partial, legacy_rows, unverifiable_rows, anchor, anchor_ok,
key_source, tamper_evident, key_rotated.
Baş çıpası
Tablonun dışında bir çıpa saklanır: tanımlayıcı, özet, satır sayısı, zaman damgası. O olmadan en yeni satırları silmek ya da tabloyu boşaltmak hiçbir iz bırakmazdı. Çıpa her ilerlediğinde bir eylem tetiklenir ve kod, genel bir yeniden oynatmanın fark edilebilmesi için çıpanın veritabanı dışına — dosyaya, syslog'a, harici bir uç noktaya — kopyalanmasını açıkça önerir.
Eklenti var olan bir çıpanın üzerine yazmayı reddeder ve tablonun kendisinden türetilmiş bir çıpanın yalnızca sonraki kırpmaları tespit edilebilir kıldığını dürüstçe belirtir.
Saklama
ledger_retention_days, varsayılan 1825 gün (5 yıl), sınırlar 0–3650. 0 değeri
sınırsız saklama demektir.
Budama kendi günlük cron'unda çalışır ve yalnızca bitişik bir öneki kaldırır: zincirin ortasında asla delik açılmaz. Kalanın doğrulanabilir olması için silinen son satırın özeti hatırlanır. Çalıştırma başına tavan: 20.000 satır (500'lük 40 grup). Çok büyük bir budama gecikmesi böylece birkaç güne yayılarak kapanır.
Veri minimizasyonu
- IP adresi: IPv4'te son sekizli sıfırlanır (/24 korunur), IPv6 /48'e kırpılır ve kalan 80 bit sıfırlanır. Maskeleme ikili biçim üzerinde yapılır; IPv4'ü eşleyen bir IPv6 adresi IPv4 gibi işlenir.
- User-agent: dizenin kendisi değil, yalnızca tuzlanmış bir özeti saklanır.
page_url: sitenin ana bilgisayarlarına karşı doğrulanır. Çağıran taraf esastır — değeri verirse, boş bile olsa, yanıt odur;Refereryalnızca hiçbir şey söylemediyse incelenir ve aynı şekilde doğrulanır.- Ziyaretçi token'ı: kriptografik bir üreteçten gelen, kimlikle hiçbir bağı olmayan 32 onaltılık karakter.
Algoritma
ledger_hash_algo, sha256 (varsayılan) ve sha3-256 değerlerini kabul eder; bunlar
PHP'nizin gerçekten desteklediği algoritmalarla kesiştirilir. Ayar yönetimde görünür ama
değiştirilemezdir: algoritma değiştirmek, var olan tüm satırların doğrulamasını
başarısızlığa uğratırdı. Sütunlar daha geniş boyutlandırılmıştır, ama gerçek seçim bu iki
algoritmayla sınırlıdır.
Audit ledger sekmesi
25'lik sayfalanmış liste: tanımlayıcı, yerel tarih ve ham UTC zaman damgası, ziyaretçi token'ı, olay, kategoriler, profil, takma adlaştırılmış IP ve zincir halkası (önceki özet → geçerli özet, ekranda kırpılır, tam değer ipucu balonunda).
Filtreler: ziyaretçi token'ı (32 onaltılık), olay, profil, tarih aralığı — girişler sitenin saat diliminde yapılır ve gerçekte saklanan UTC zaman damgalarıyla karşılaştırılır.
CSV ve JSON dışa aktarımları. JSON bir zarf taşır (biçim, algoritma, anahtarın kaynağı); böylece bir otorite, zincirin geri kalanına sahip olmadan kesiti yeniden doğrulayabilir. Tüm CSV hücreleri, elektronik tablo formül enjeksiyonuna karşı etkisizleştirilir.
Kayıt defterini API üzerinden okumak
GET /owc/v1/ledger şu parametreleri kabul eder: page, per_page (1–200, varsayılan 50),
visitor_token, from ve to. Son üçü, zincirin tamamını dolaşmadan bir erişim talebine
(md. 15) yanıt vermeyi sağlar. Sınırlar UTC olarak okunur ve YYYY-AA-GG biçimindeki bir
tarih gün boyuna genişletilir. Gerçekten uygulanan filtreler yanıtta döndürülür:
denetimlerce reddedilen bir filtre, “işte kayıt defterinin tamamı” gibi okunmamalıdır.
Kayıt defteri bir yazmayı reddettiğinde ne olur
Bu, eklentinin tamamındaki en önemli davranıştır. Kayıt defteri açıksa ve satırın yazılması başarısız olursa, rıza çerezi iptal edilir ve yanıt 503 olur. Hiçbir şey saklanmaz, hiçbir izleyici serbest bırakılmaz.
Gerekçe doğrudandır: ispatlanamayan bir rıza öne sürülmemelidir. İzlenecek yol için bkz. Sorun giderme.
Genişletme noktaları
add_action( 'owc_consent_updated', function ( $categories, $event, $source ) {}, 10, 3 );
add_action( 'owc_consent_cookie_not_sent', function ( $cookie, $event ) {}, 10, 2 );
add_action( 'owc_ledger_lock_failed', function ( $event, $token ) {}, 10, 2 );
add_action( 'owc_ledger_write_failed', function ( $error, $event, $token ) {}, 10, 3 );
add_action( 'owc_ledger_anchor', function ( array $anchor ) {} );
add_action( 'owc_ledger_pruned', function ( $deleted, $days ) {}, 10, 2 );
Çıpayı veritabanının dışına kopyalamak için kullanılacak kanca owc_ledger_anchor'dır.
Kayıt defterinin sınırları
- Kurcalamaya karşı kanıt koşulludur ve eklenti bunu kendisi söyler.
- 1.2.0 öncesindeki satırlar anahtarsız bir özet taşır: asla yeniden imzalanmazlar — yeniden imzalama, bir saldırganın tahrif edilmiş bir geçmişi imzalatmasına yol açardı — ve var oldukları sürece “zincir sağlam” sonucunu engellerler.
- Saklama, günlük çalıştırma başına 20.000 satırla sınırlıdır.
- Kayıt defteri, WordPress'in kişisel veri silicisi tarafından silinmez: bu bir hash zinciridir, kaldırmak var olma nedeni olan kanıtı yok ederdi ve içinde yalnızca takma adlı bir token ile kırpılmış bir IP vardır. Bir mesaj, bu tercihi veri sahibine açıklar.
Haklar portalı (DSAR)
Portal, bir kişinin haklarını sitenizdeki bir sayfadan kullanmasını sağlar. Varsayılan olarak açıktır, ama yalnızca kısa kodu yerleştirdiğiniz yerde görünür.
Form
[owc_dsar_form]
Nitelikler:
| Nitelik | Varsayılan | Görevi |
|---|---|---|
types | access,rectification,erasure,portability,restrict,object,optout | Sunulan türler, virgülle ayrılmış |
title | “Kişisel verilerim üzerindeki haklarımı kullanmak istiyorum” | Bloğun başlığı |
submit_label | “Talebimi gönder” | Düğmenin etiketi |
dsar_enabled kapalıysa kısa kod “portal kapalı” mesajını gösterir ve REST rotası 404
yanıtı verir: kapatma gerçekten sunucu tarafındadır.
İstediğiniz liste, sunucunun kabul ettiği listeyle kesiştirilir: uç noktanın reddettiği bir seçenek ziyaretçiye asla sunulmaz.
Sekiz talep türü
access, rectification, erasure, portability, restrict, object, optout,
withdraw.
withdraw, formun sunduklarından bilerek çıkarılmıştır. Çerez rızasını geri çekmek
tercih panelinde anlıktır; bunu 30 günlük yazılı bir prosedüre bağlamak, geri çekmeyi rıza
vermekten zor hale getirirdi (GDPR md. 7.3). Formun altındaki bir bağlantı, bu durum için
doğrudan tercih panelini açar.
owc_dsar_types filtresi tek doğruluk kaynağıdır: uç noktanın izin listesi ondan türetilir.
Tam döngü
1. Gönderim. POST /owc/v1/dsar. Şu sırayla üç sunucu koruması:
- Bot tuzağı: doldurulmuş gizli bir alan, hatalı biçimli bir gönderimin genel mesajıyla 400 reddine yol açar — bot, reddin nedeni hakkında hiçbir şey öğrenmez. Tarayıcı tarafında form, hiçbir şey göndermeden başarı mesajını bile gösterir.
- Beyan (md. 12.6): “KENDİ kişisel verilerim üzerinde bir hak kullandığımı onaylıyorum” kutusu işaretlenmelidir ve bu yalnızca tarayıcıda değil, sunucu tarafında doğrulanır. Talep ile birlikte kaydedilir.
- Formun görünmesi ile gönderim arasında en az 3 saniyelik gecikme, istemci tarafında.
Hız sınırları: IP adresi başına saatte 3, hedeflenen e-posta adresi başına günde 3 — adresi saldırgan seçtiğine göre sınırlanması gereken de odur — ve tüm site için saatte 30.
Satır şu bilgilerle eklenir: pending durumu, yalnızca SHA-256 özeti saklanan 64
karakterlik bir token, token'ın son kullanma tarihi ve bir yanıt vadesi. Tanımlayıcı
döndürülmez: numaralandırma yok, hacim sızıntısı yok. Yanıt {ok, mail_sent, message}
biçimindedir ve mail_sent gerçek gönderim başarısızlığını yansıtır.
DPO bu aşamada bilgilendirilmez. Aksi halde anonim bir çağıran, her gönderimde alanınızdan iki e-posta gönderirdi.
2. Doğrulama e-postası. Bağlantı, token açık biçimde parametre olarak eklenmiş şekilde
ana sayfanıza işaret eder. Geçerlilik: dsar_token_ttl_days, varsayılan 7 gün, sınırlar
1–90. E-posta bir Reply-To başlığı taşır ama asla yeniden yazılmış bir From taşımaz —
zarfı yeniden yazmak, SPF'yi bozan şeydir. Yanıt adresi dsar_email, yoksa
legal_dpo_email'dir; asla yayımlanmaması gereken site yönetim adresi değil.
3. Kimlik doğrulaması. Bağlantı, hiçbir şey çalıştırmayan bir sayfa açar: doğrulama, bir nonce ile korunan bir POST ile yapılır. Bir e-posta bağlantı tarayıcısının (Safe Links, URL Defense, gelen kutusu önizlemesi) kişinin yerine bir kimliği doğrulamasını engelleyen budur.
Sayfa, temanın dışında sunulan, noindex, nofollow ve önbelleklenemez başlıklar taşıyan
bağımsız bir HTML belgesidir. Denemeler IP başına saatte 30 ile sınırlıdır. Yanıtlar
birbirinden ayrıdır: bilinmeyen bir bağlantı için 404, zaten doğrulanmış bir bağlantı için
200, süresi geçmiş bir bağlantı için 410, süresi dolmuş bir nonce için 403, bir yazma hatası
için 500, başarılı doğrulama için 200.
4. Doğrulamanın tetiklediği şeyler.
- Durum
verifiedolur. - Vade, doğrulamadan itibaren yeniden hesaplanır. Madde 12.3: süre, hiç doğrulanmamış bir gönderimden değil, talep tamamlandığı andan itibaren işler.
- Token yakılır. Özeti ise bilerek saklanır; böylece bağlantısını yeniden açan bir kişi, her şeye yeniden başlamasını isteyen bir 404 yerine “zaten doğrulandı” mesajını okur. Tek kullanımlık olma, durum denetimiyle garanti edilir.
- Kaydedilenler: doğrulama tarihi, kırpılmış IP, tarayıcının takma adlı token'ı — rıza kayıt defteri ile talep arasındaki tek olası köprü — ve ilişkili WordPress talebinin tanımlayıcısı.
- Kimliği çoktan ispatlanmış bir WordPress yerel talebi açılır; yani doğrudan
Araçlar → Kişisel Verileri Dışa Aktar / Sil kuyruğunuza düşer. Bu da uygulamanın
yalnızca OW Consent'i değil, sitedeki tüm eklentileri kapsamasını sağlar. Eşleme:
accessveportability→ dışa aktarma;erasure→ silme; diğer türler yerel bir talep açmaz. - Sorumlu,
dsar_emailvedsar_notify_emailadreslerinde bilgilendirilir; hiçbiri geçerli değilse yönetim adresine düşülür.
5. Uygulama. DSAR requests sekmesinin üzerindeki bir panel, doğrulanmış 20 talebi vadeye göre sıralanmış olarak, kalan ya da gecikilen gün sayısıyla birlikte listeler.
| Eylem | Davranış |
|---|---|
| Verileri indir (JSON) | Kimlik hiç doğrulanmamışsa 409 reddi. Dosyanın adı dsar-<id>-<YYYYAAGG>.json olur |
| Verileri sil | Yalnızca erasure türündeki bir talep için ve yalnızca kimlik doğrulandıktan sonra sunulur. Talep, silmeden önce kapatılır; aksi halde işlemdeki talebin serbest metni kendi uygulamasından sağ çıkardı |
| +2 ay | Md. 12.3 uzatması, yalnızca bir kez, en fazla 500 karakterlik bir gerekçeyle. Vade 60 gün geri gider, hatırlatmalar yeniden kurulur ve veri sahibine yeni vadeyi ve gerekçeleri içeren bir e-posta gönderilir |
| Kapat | resolved veya rejected durumu, not zorunlu. Zaten kapatılmış bir talebi yeniden yazmak mümkün değildir ve hiç doğrulanmamış bir kimliğe “yerine getirildi” yazmak mümkün değildir |
| Bağlantıyı yeniden gönder | Yeni bir token üretir, bu da öncekini geçersiz kılar |
Beş durum: pending, verified, resolved, rejected, expired.
Ekran, token'ı ya da özetini asla yüklemez ve talep sahibinin adını göstermez.
6. Süre takibi. Günlük cron üzerinde: vadeye göre en fazla 200 doğrulanmış talep dolaşılır, vadeden yedi gün önce bir hatırlatma, vade aşımında bir hatırlatma, her biri yalnızca bir kez. Bir yönetim şeridi, süresi geçmiş ve yedi günden az kalan talepleri bildirir.
7. Temizlik. Hiç doğrulanmamış gönderimler, token'larının süresi dolduktan sonra
silinir; kapatılmış talepler ise retention_dsar_days süresinin ötesinde silinir. Ölçüm,
gönderimden değil, kapatmadan başlar.
Taşınabilirlik paketi
Dışa aktarma, ow-consent/dsar-export biçiminde bir belge üretir; zaman damgası, site,
veri sahibi, talep ve veri grupları ile birlikte. Sitede kayıtlı tüm dışa aktarıcıları
çağırır, dışa aktarıcı başına 50 sayfaya kadar sayfalar ve 20 saniyede durur. Silme, aynı
sınırlarla silici tarafında aynı şeyi yapar.
Filtre: owc_dsar_export_bundle( $bundle, $email, $id ).
Dışa aktarmanın ve silmenin neyi kapsadığı, dolayısıyla sitenizde kurulu eklentilere bağlıdır: bu kancaların hiçbirini kaydetmeyen bir eklenti elle ele alınmalıdır.
WordPress'in yerel araçlarıyla entegrasyon
ow-consentanahtarı altında kayıtlı bir dışa aktarıcı, iki grupla: hak talepleri ve rıza kayıt defteri.- Silici:
- hiç doğrulanmamış gönderimler silinir — hiçbir ispat değeri yok, yalnızca kişisel veri;
- kapatılmış taleplerin serbest metni ve adı silinir, asgari satır (tarih, tür, durum)
retention_dsar_dayssüresine kadar kanıt olarak (md. 5.2) korunur; - hâlâ açık olan bir talep, silinmeden önce yanıtlanması gerektiğini açıklayan bir mesajla korunur;
- rıza kayıt defteri silinmez; nedeni yukarıda açıklanmıştır.
- Eklenti ayrıca WordPress'in gizlilik politikası taslağını da besler.
Formun altındaki bilgilendirme
Formun altında, açılır bir blok 13. madde bilgilendirmesini taşır: sorumlunun kimliği ve
adresi, gizlilik iletişimi, amaç ve hukuki dayanak (md. 6.1.c), toplanan veriler, alıcılar
ve saklama süresi, yanıt süresi ve uzatma olasılığı, yetkili denetim otoritesi, politikaya
bağlantı. Filtre: owc_dsar_form_notice( $html, $context ).
Gösterilen otorite, On bir uyumluluk profili bölümünde anlatılan türetmeden gelir ve yalnızca büyük harfle başlıyorsa kabul edilir: ham ayarı okumak, Güney Afrika, Hindistan, Avustralya ya da Kaliforniya'daki bir sitede Fransız otoritesini anmaya yol açardı.
JavaScript olmadan gönder düğmesi gizlenir ve bir mesaj iletişim adresini önerir — böylece tarayıcı, talep sahibinin adresini URL'ye ve dolayısıyla geçilen tüm sunucuların ve proxy'lerin günlüklerine yazacak yerel bir gönderim yapmaz.
DSAR ayarları
| Ayar | Varsayılan | Sınırlar |
|---|---|---|
dsar_enabled | true | boole |
dsar_email | '' | herkese açık iletişim ve bildirim alıcısı |
dsar_notify_email | '' | ek alıcı |
dsar_response_days | 30 | 1–30 — asla bir aydan fazla değil |
dsar_token_ttl_days | 7 | 1–90 |
retention_dsar_days | 1095 (3 yıl) | 1–3650 |
Genişletme noktaları
add_action( 'owc_dsar_submitted', function ( $type, $email, $message ) {}, 10, 3 );
add_action( 'owc_dsar_verified', function ( $id, array $row ) {}, 10, 2 );
add_action( 'owc_dsar_fulfilled', function ( $id, $what, $trace ) {}, 10, 3 );
add_action( 'owc_dsar_mail_failed', function ( $id, $email, $kind ) {}, 10, 3 );
Portalın sınırları
- Kimlik tek bir faktöre dayanır: e-posta gidiş-dönüşü. Md. 12.6 kapsamındaki her ek kanıt, talebin notlarına elle girilir.
- Başarısız bir e-posta gönderimi döngüyü kilitler: yanıt
mail_sent: falsebilgisini verir ve form iletişim adresine yönlendiren bir mesaj gösterir, ama taleppendingkalır ve yasal süre başlamaz. - Vade hatırlatmaları ve temizlik WP-Cron'a bağlıdır.
- Talepler tablosu, ayarınız ne olursa olsun eklentinin kaldırılmasında her zaman silinir. Silmeden önce dışa aktarın.
CCPA opt-out'u: “Do Not Sell or Share”
ABD profilleri altında kanun; adlandırılmış, görünür ve opt-out'u gerçekten uygulayan bir denetim öğesi ister.
Yerleştirmenin iki yolu
Kısa kod, istediğiniz yere:
[owc_dnsmpi]
[owc_dnsmpi label="Kişisel bilgilerimi satmayın ve paylaşmayın" class="baglantim"]
| Nitelik | Varsayılan |
|---|---|
label | “Do Not Sell or Share My Personal Information” |
class | owc-dnsmpi |
Alt bilgiye otomatik ekleme: ccpa_inject_footer ayarı, varsayılan olarak açık,
wp_footer üzerinde öncelik 20 ile render edilir.
Bir tıklama ne yapar
Bir tıklama opt-out'u uygular. Bir panel açmaz. Çalışma zamanı taze bir nonce alır,
ardından footer_link kaynağıyla ve tüm isteğe bağlı kategoriler false olacak şekilde bir
reject_all gönderir. Bağlantı aria-busy="true" durumuna geçer ve bir role="status"
alanı durumu gösterir: “kaydediliyor”, ardından “opt-out'unuz bu tarayıcıda kaydedildi” ya
da hata mesajı.
Kod gerekçesini anar: CCPA uygulama yönetmeliklerine göre (§7026(a)(1)), yalnızca bir panel açan bir bağlantı uyumlu bir mekanizma değildir.
fetch ve Promise olmadan yedek yol (eski WebView, gömülü tarayıcı): tıklama, reklam
kategorileri önceden kapalı konumdayken tercih panelini açar.
Önbellek kısıtı
Sunulan HTML herkes için aynıdır. Bu yüzden bağlantı, sitenin yapılandırılmış profili
ccpa ya da us_generic ise görünür olarak render edilir; değilse gizli render edilir
ve bölgesel tespit çerezine göre, yargı bölgesi bunu gerektiren ziyaretçiler için istemci
tarafında açığa çıkarılır.
Bölgesel tespit kapalıysa ve yapılandırılmış profiliniz ABD profillerinden biri değilse blok hiç basılmaz: ölü işaretleme yok.
Bu modülün JavaScript yapılandırmasında hiçbir ziyaretçi verisi yolculuk etmez — yalnızca profil listeleri, asla çözülmüş boole değeri değil.
Bu modülün kaynakları, Consent Mode reddinin bir etiket yöneticisi tetiklenmeden önce
gtag'e ulaşabilmesi için alt bilgide değil, <head> içinde basılır. JavaScript yalnızca
ES5'tir.
Sınırlar
- Tek tıklık denetim öğesi
fetchvePromisegerektirir. - Bağlantı yalnızca
ccpaveus_genericprofilleri altında zorunludur; diğer her profilde ne gösterilir ne de açığa çıkarılır. - İstemci tarafındaki açığa çıkarma, bölgesel tespit çerezine ve dolayısıyla JavaScript'e bağlıdır.
Google Consent Mode v2
Modül varsayılan olarak açıktır (gcm_enabled).
Yedi sinyal
Consent Mode v2'nin yedi sinyali yayımlanır: ad_storage, ad_user_data,
ad_personalization, analytics_storage, functionality_storage,
personalization_storage ve security_storage. Eklentinin altı kategorisi bunlara tek
bir doğruluk kaynağından eşlenir; bu da banner'ın, engellemenin ve bootstrap'ın
birbirinden ayrışamayacağını garanti eder. Tablo, Çerez kategorileri
bölümündedir.
Her türlü rızadan önceki varsayılan değerler
default çağrısı statik işaretleme olarak basılır ve update tarayıcıda hesaplanır:
sayfayı önbelleklenebilir tutan budur.
| Sinyal | Opt-in rejimi | Opt-out rejimi |
|---|---|---|
ad_storage | denied | granted |
analytics_storage | denied | granted |
ad_user_data | denied | granted |
ad_personalization | denied | granted |
personalization_storage | denied | granted |
functionality_storage | site functional kategorisini sunuyorsa denied, aksi halde granted | granted |
security_storage | her zaman granted | granted |
İki küme de aynı sayfada basılır. Çalışma zamanı, hangisinin uygulanacağını bölgesel tespit çerezine göre seçer. Bu olmasaydı önbelleğe alınmış bir sayfa, Amerikalı bir ziyaretçinin yargı bölgesini Avrupalı bir ziyaretçiye sabitlerdi.
İlgili iki ayar
| Ayar | Varsayılan | Etkisi |
|---|---|---|
gcm_ads_data_redaction | true | ad_storage reddedildiği sürece reklam kimliklerini maskeler |
gcm_url_passthrough | true | Çerezler reddedildiği sürece gclid / dclid değerlerini URL'ler üzerinden taşır |
Bilinmesi gerekenler
security_storage bir güncellemeden asla etkilenmez: spesifikasyonun öngördüğü gibi verilmiş
kalır. Kontrol paneli, Consent Mode'un etkin olup olmadığını gösteren bir kart sunar.
IAB TCF v2.2
TCF modülü varsayılan olarak kapalıdır ve eklentinin sağlayamayacağı bir tanımlayıcı ister. Açmadan önce sınırlar bölümünü okuyun.
Etkinleştirme
| Ayar | Varsayılan | Sınırlar |
|---|---|---|
tcf_enabled | false | boole |
tcf_cmp_id | 0 | 0–4095 |
tcf_publisher_country | FR | 2 harfli ISO kodu |
tcf_publisher_purposes_li | [] | amaç listesi |
tcf_special_features | [] | özel özellik listesi |
4095 tavanı keyfi değildir: CmpId alanı TCF dizesinde 12 bit kaplar.
Modülün hiçbir şey yayımlamayı reddettiği üç durum
- CMP ID yok (
tcf_cmp_id < 1):__tcfapiyok, TC dizesi yok,euconsent-v2çerezi yok, REST rotası yok. Bir yönetim uyarısı bunu açıklar. CMP ID size IAB Europe tarafından verilmelidir; eklenti bir tane sağlamaz. CmpId değeri 0 olan bir dize yayımlamak, hiçbir şey yayımlamamaktan kötü olurdu. - 4095'ten büyük CMP ID: aynı ret, kendi uyarısıyla. 12 bite kırpılmış bir değer başka bir CMP'yi işaret ederdi — bir kimlik hırsızlığı.
- Önbellekte Global Vendor List yok: stub basılır ama API, bir liste sürüm numarası
uydurmak yerine boş bir dizeyle
cmpStatus: 'error'yanıtı verir.
Bir tanı bir seçeneğe yazılır (disabled, missing_cmp_id, no_gvl, active) ve
yalnızca yönetim veya cron bağlamında, asla herkese açık bir sayfada değil.
Global Vendor List
- Kaynak:
https://vendor-list.consensu.org/v3/vendor-list.json. - Bir sayfa render edilirken asla indirilmez. Bunu günlük bir cron üstlenir; ilk çalıştırma etkinleştirmeden beş dakika sonradır. Yönetimde önbellek soğuksa tek seferlik bir alma kuyruğa konur.
- İstek: en fazla 5 saniye zaman aşımı, 2 yönlendirme, 4 MB ile sınırlı yanıt. Tavana ulaşan bir gövde kırpılmış sayılır ve reddedilir.
- Sağlayıcı başına yalnızca gerekli alanlar tutulur; yığınlar boşaltılır. Serileştirme yine de çok büyükse iki kademeli kırpma uygulanır: önce etiketler ve URL'ler, sonra yalnızca amaçlara indirgeme.
- Saklama: bir transient içinde bir hafta, stale-if-error ile — bir başarısızlık durumunda son geçerli kopya korunur.
- Herkese açık rota:
GET /owc/v1/tcf/gvl, saatte 10 istekle sınırlı. Önbellekteki kopyayı birETagveCache-Control: public, max-age=86400ile sunar ve koşullu istekleri işler. Önbellekte hiçbir şey yoksaRetry-After: 300ile 503 yanıtı verir — asla sentetik bir liste değil. Bu rota asla giden bir istek tetiklemez.
TC dizesi nerede hesaplanır
PHP'de değil, tarayıcıda. <head> içinde öncelik 0 ile tamamen statik bir stub basılır:
konumlandırıcı iframe, window.__tcfapi uygulaması, postMessage aktarımı ve JavaScript
ile yazılmış bir Core segment kodlayıcısı. Yayımlanan yapılandırma hiçbir ziyaretçi verisi
içermez — sayfa önbelleğiyle uyumlu kalmayı sağlayan budur. Filtre: owc_tcf_stub_config.
Kodlayıcının bir PHP aynası vardır ama eklenti içinde hiçbir çağıranı yoktur: entegrasyonlara ve testlere ayrılmıştır ve asla önbelleklenebilir HTML'e basılmaması uyarısıyla birlikte gelir.
Neler kodlanır
Yalnızca Core segmenti, dolgusuz base64url ile. Sağlayıcı bölümü ya bit alanı ya da aralık olarak kodlanır: iki boyut da ölçülür ve küçük olan kazanır. Tarayıcıya iletilen sağlayıcı dizini, kendi kompakt biçimimizi kullanır ve aşıldığında dizinin boşaltıldığı katı bir tavanı vardır (o zaman sağlayıcı rızaları kaybolur, liste sürümü korunur).
Kategori → TCF amacı eşlemesi
| Kategori | Amaçlar |
|---|---|
necessary | hiçbiri — TCF kapsamı dışında; bu da “Tümünü reddet” işleminin 1. amaç için bir rıza üretemeyeceğini garanti eder |
functional | 1 |
analytics | 1, 8, 9, 10 |
marketing | 1, 2, 3, 4, 7 |
preferences | 1, 5, 6, 11 |
social | 1 |
Filtre: owc_tcf_purpose_map.
Yayıncının meşru menfaati: yalnızca 2, 7, 8, 9, 10 ve 11 numaralı amaçlar tutulur;
çünkü TCF v2.2, 1, 3, 4, 5 ve 6 numaralı amaçlar için meşru menfaati yasaklar.
tcf_publisher_purposes_li içindeki diğer her değer sessizce ayıklanır.
Bir sağlayıcı, “rıza” dayanağıyla bildirdiği amaçlardan en az biri verildiğinde rızalı sayılır.
Özel özellikler
Yalnızca iki girdi desteklenir: 1 — kesin konum verisinin kullanımı ve 2 — cihaz
özelliklerinin etkin taranması. Kullandıklarınızı tcf_special_features içinde bildirin;
liste bu kataloğa indirgenir.
Tercih panelinde gerçek onay kutuları olarak görünürler. “Tümünü kabul et” bunları işaretlemez: kendilerine özgü açık bir opt-in isterler. “Tümünü reddet” ve “Do Not Sell” onların işaretini kaldırır. TC dizesinin içinde yaşarlar ve panel yeniden açıldığında TCF API'sinden yeniden doldurulurlar.
Paneldeki TCF katmanı
Yalnızca modül etkinse, yani tcf_enabled ve kullanılabilir bir CMP ID varsa render
edilir. İki blok:
- Amaçlar: yalnızca zorunlu olmayan bir kategori üzerinden erişilebilen ve sağlayıcı listesi kataloğunda adı geçen amaçlar. Kendiliğinden geri dönen bir anahtar, hiç anahtar olmamasından kötü olurdu. Bir amacı değiştirmek, onu bildiren tüm kategorilere yazar; ardından görünüm yeniden türetilir.
- Bildirilen özel özellikler.
Gösterilmemiş hiçbir şey dizeye kodlanmaz.
JavaScript API'si
window.__tcfapi( command, version, callback, parameter );
// komutlar: ping, getTCData, getInAppTCData,
// addEventListener, removeEventListener, getVendorList
window.__owcTcfUpdateState( tcData ); // verileri değiştirir ve dinleyicileri bilgilendirir
window.__owcTcfRefresh(); // yeniden hesaplar ve 'useractioncomplete' yayar
window.__owcTcfUiShown(); window.__owcTcfUiHidden();
window.__owcTcfSetSpecialFeatures( [ 1, 2 ] );
Kabul edilen sürümler: yok, null, 2, '2', 2.2, '2.2'. Diğer her değer
callback(null, false) verir.
gdprApplies
İstemci tarafında kararlaştırılır. Bölgesel tespit kapalıysa değer true'dur. Değilse
ziyaretçinin ülkesi, TCF anlamında GDPR'nin uygulandığı 31 kodluk listeyle karşılaştırılır
(27 AB ülkesi, artı IS, LI, NO, GB ve CH). Kapalı tarafa düşer: bilinmeyen bir ülke
true verir.
euconsent-v2 çerezi
Yalnızca istemci tarafında ve yalnızca modül hazırken ve ziyaretçi bir eylemde
bulunmuşken yazılır. Aksi halde çerez silinir. Süresi rızanın süresidir, 13 ayla
sınırlandırılır (IAB / CNIL tavsiyesi). SameSite=Lax, HTTPS'te Secure.
TCF modülünün sınırları — mutlaka okuyun
- Bu, IAB Europe nezdinde kayıtlı bir CMP değildir. Kendi CMP ID'nizi ister ve onunla bile TCF politikası, kayıtlı bir CMP'nin hem amaç düzeyinde hem de sağlayıcı düzeyinde seçim sunmasını zorunlu kılar. Burada amaç anahtarları kategorileri izler ve sağlayıcı düzeyinde hiçbir seçim yoktur: sağlayıcıların bu sinyali reddetmesi meşrudur. Yönetim ekranı bunu söyler ve “CMP uyumlu mod (resmî değil)” ifadesini kullanır; bu mod geliştirmede çoğu SSP tarafından kabul edilir ama AEA'da gerçek üretimde reddedilir. TCF kapsamındaki reklam geliri sizin için önemliyse sertifikalı bir CMP kullanın.
- Yalnızca Core segmenti:
disclosedVendors,allowedVendorsya dapublisherTCsegmenti yok. - Hiçbir yayıncı kısıtlaması yayımlanmaz: ilgili sayaç her zaman 0'dır ve kısıtlamalar nesnesi boştur.
purposeOneTreatmentveuseNonStandardTextsher zamanfalse,isServiceSpecificher zamantrue'dur — küresel kapsam yoktur — ve rıza ekranı her zaman 0'dır.getVendorList, sürüm parametresini yok sayar ve her zaman önbellekteki listeyi döndürür.- Yayıncı rızaları genel amaçları kopyalar: özel amaç yoktur.
- Yalnızca iki özel özellik.
- Modül, çalışan bir cron ve giden HTTPS ister. Önbellekte liste yoksa API
cmpStatus: 'error'yanıtı verir ve herkese açık rota 503 döndürür.
Global Privacy Control
GPC, tarayıcının gönderdiği bir sinyaldir — Sec-GPC: 1 başlığı ve
navigator.globalPrivacyControl özelliği. Eklenti bunu varsayılan olarak dikkate alır
(gpc_honor), ama işlenme biçimi hukuki rejime bağlıdır ve önemli olan nokta budur.
ABD profilleri altında: bağlayıcı
Sinyal, ccpa ve us_generic profilleri altında bağlayıcı ve evrensel bir opt-out olarak
işlenir. Avustralya açıkça dışarıdadır: opt-out rejimi, ama GPC'yi tanımıyor.
Sunucu tarafında yazma, yalnızca şu sıradaki tam bir denetim zincirinden sonra gerçekleşir:
gpc_honoraçık;- sinyal var —
Sec-GPCbaşlığı, bazı proxy'ler ve CDN'ler başlığı yeniden adlandırdığı içinX-Sec-GPCyedeğiyle; yalnızca tam olarak1değeri sayılır; - etkin profil
ccpaya daus_generic— aksi halde hiçbir şey yazılmaz; - bu, sıradan bir sayfa görüntülemesi: yönetim değil, cron değil, AJAX değil, REST değil,
XML-RPC değil, WP-CLI değil ve metot
GET; - başlıklar henüz gönderilmemiş — konulamayan bir çerez, her istekte yeniden kaydedilecek bir karar demektir;
owc_gpcoturum işaretçisi yok: tarama oturumu başına bir kez;- ziyaretçi bota benzemiyor (boş kullanıcı aracısı ya da içinde
bot,crawl,spider,slurp,monitor,uptime,pingdom,headless,preview,curl/,wget,python-,java/,go-http,okhttp,httpclient,libwww,facebookexternalhitgeçenler); - hâlihazırda saklanan seçim sinyali zaten karşılamıyor — karşılıyorsa yalnızca tarayıcı işaretlenir;
- paylaşılan hız sınırına uyuluyor: IP başına saatte 30;
- bir başarısızlık yeniden deneme döngüsüne dönüşmesin diye tarayıcı, yazmadan önce işaretlenir.
Olay, auto kaynağıyla gpc_opt_out olarak kaydedilir. Sayfa URL'si sitenin URL'sinden ve
istenen yoldan yeniden kurulur — asla Host başlığından, asla Referer başlığından.
Kapsam: tüm isteğe bağlı kategoriler false olur; zorunlu kategoriler verilmiş kalır. Bu,
satış veya paylaşım kavramının geniş bir okumasıdır.
Şeffaflık: GPC, açıkça kaydedilmiş bir seçimin üzerine yazarsa, beş dakikalık bir çerez istemci tarafında ekranın altında bunu açıklayan bir bildirim tetikler; paneli açan bir “tercihlerimi yönet” düğmesi ve bir kapatma düğmesiyle birlikte.
GDPR ve benzeri profiller altında: yalnızca bir ipucu
ABD opt-out rejimlerinin dışında sinyal, bir rıza olarak değil, bir belirti olarak işlenir:
<html>üzerinedata-owc-gpc="1"niteliği konur;- Consent Mode;
ad_storage,analytics_storage,ad_user_data,ad_personalizationvepersonalization_storagesinyallerinideniedyapar; - tüm isteğe bağlı kategoriler yalnızca bellekte
falseyapılır; givenyanlış kalır, banner görünmeye devam eder ve hiçbir şey kaydedilmez.
Dahili bir bayrak, ne çerezin ne de kayıt defterinin söylemediği bir şeyi — ziyaretçinin “zaten opt-out” olduğunu — çalışma zamanının ilan etmesini engeller. Gerekçe kodda yazılıdır: GPC, GDPR ve ePrivacy, İsviçre nLPD'si, LGPD, POPIA, PIPL, DPDP ve 25 sayılı Kanun altında hukuken tanınan bir sinyal değildir.
Bu modülün bıraktığı iki çerez
| Çerez | Süre | Görevi |
|---|---|---|
owc_gpc | oturum | Sinyalin bu tarayıcı için işlendiğini işaretler |
owc_gpc_notice | 300 sn | “GPC seçiminizin yerine geçti” bildirimini tetikler |
İkisi de path=/, SameSite=Lax, HTTPS'te Secure ve betikle okunabilirdir.
Genişletme noktası
add_action( 'owc_gpc_honored', function ( array $categories ) {} );
Bölgesel tespit
Bölgesel tespit, her ziyaretçiye sitenin yapılandırılmış profilini değil, kendi yargı bölgesinin profilini uygular. Varsayılan olarak kapalıdır.
| Ayar | Varsayılan |
|---|---|
geo_enabled | false |
geo_default_profile | gdpr |
geo_mmdb_enabled | false |
Tespit zinciri
İlk başarı kazanır:
- Cloudflare (
CF-IPCountry) — yalnızca site Cloudflare arkasında olduğunu bildirmişse; - AWS CloudFront (
CloudFront-Viewer-Country) — aynı koşul; GEOIP_COUNTRY_CODE, sunucunun kendisinin yazdığı değişken (mod_geoip, ngx_http_geoip), dolayısıyla istemci tarafından taklit edilemez; ardından, bir proxy bildirilmişse, HTTP başlığı biçimindeki varyantlar;- Yerel MaxMind veritabanı,
geo_mmdb_enabledaçıksa; - Hiçbiri.
wp-config.php içinde açık bir bildirim olmadan hiçbir HTTP ülke başlığına inanılmaz:
bunlar istemci tarafından taklit edilebilir. Sabitler için bkz. Kurulum.
Ülke kodu, resmî olarak atanmış ISO-3166-1 alpha-2 izin listesine karşı doğrulanır (sabit
kodlu yaklaşık 249 kod). Kullanıcıya ait ya da ayrılmış kodlar — XX, ZZ, Tor
çıkışlarının T1 kodu — reddedilir.
Kapalı tarafa düşme
Ülke tespit edilemezse eklenti geo_default_profile değerini okur ama her opt-out profilini
gdpr profiline düşürür. ccpa, us_generic ya da au olarak ayarlanmış bir
geo_default_profile, tespit edilemeyen ziyaretçiler için yok sayılır — ve yönetim ekranı,
sessizce yok sayılacak bir seçim sunmak yerine bu seçicide yalnızca opt-in profilleri
önerir.
Gerekçe doğrudandır: bu güvence olmasaydı Amerikan İngilizcesiyle yapılandırılmış bir site, tüm AEA ziyaretçilerini opt-out rejimine sokar ve hiçbir rıza olmadan izleyicileri “verilmiş” olarak işaretlerdi.
Sitenin yerel ayarına düşülmez: bir sitenin dili, ziyaretçisinin nerede olduğu hakkında hiçbir şey söylemez.
owc_geo çerezi
- Süre 24 saat,
path=/,SameSite=Lax, HTTPS'teSecure, betikle okunabilir — ön yüz bootstrap'ının buna ihtiyacı var. - İçerik: ülke, profil, bir zaman damgası ve bir kimlik doğrulama kodu. Asla IP adresi yok.
- Okumada: boyut sınırlı, ülke ISO listesine karşı doğrulanır, zaman damgası pencerede, kod sabit zamanda doğrulanır. Profil her zaman ülkeden yola çıkarak sunucu tarafında yeniden hesaplanır: bir ziyaretçi kendi hukuki rejimini seçemez.
- Yalnızca gerçek bir tespit önbelleklenir. “Kapalı tarafa düşme” yedeği asla hatırlanmaz.
- Yalnızca bir ön yüz isteğinde ve yalnızca tespit açıksa yazılır.
Ülke → profil eşlemesi
| Ülke | Profil |
|---|---|
| AEA'nın 30 ülkesi | gdpr |
| GB, JE, GG, IM | uk_pecr |
| CH | ch_nfadp |
| BR | lgpd |
| ZA | popia |
| CN, HK | pipl |
| IN | dpdp |
| AU, NZ | au |
| CA | quebec |
| US | ccpa |
| Geri kalan her şey | Yedek, opt-in'e düşürülmüş olarak |
Hong Kong gerçekte kendi yerel yönetmeliğine tabidir; katılık gereği PIPL gibi işlenir. Yeni
Zelanda, Avustralya gibi işlenir. Kanada'nın tamamı quebec alır — en katı rejim kazanır.
Amerika Birleşik Devletleri, diğer eyaletler için de profil işlevi gören ccpa alır.
Önbellek kısıtı — tespitin yapmadıkları
Coğrafi profil, render edilen HTML'i değiştirmez. Profilin yeniden yazılması yalnızca iki
ziyaretçi REST rotasına uygulanır: /owc/v1/consent ve /owc/v1/state. Sayfa render'ı,
yönetim rotaları, wp-admin, cron ve WP-CLI yapılandırılmış profili korur. Bu yeniden
yazımı kullanan her yanıt önbelleklenemez olarak işaretlenir.
Rejimi istemci tarafında, çerezden seçen ön yüz çalışma zamanıdır. Kabul edilmiş sonuç: bir ziyaretçiye uygulanan rejim JavaScript'e bağlıdır ve ilk sayfası önbellekten gelen bir ziyaretçi, çerez var olana kadar sitenin yapılandırılmış profiliyle işlenir.
Gömülü MaxMind okuyucusu
Eklenti kendi MMDB okuyucusunu taşır; saf PHP ile yazılmış, Composer bağımlılığı yok — WordPress.org'da yayımlanan bir eklenti resmî paketi gömemez.
- Yalnızca okuma, yalnızca ülke. Şehir yok, ASN yok.
- Sınırlı giriş/çıkış: küçük bloklar halinde okuma, birkaç megabaytlık bir dosyanın belleğe yüklenmesi asla yok.
- Asla istisna fırlatmaz: eksik, okunamaz, kırpılmış, bozuk ya da düşmanca bir dosya
nullverir ve tespit kendi katı profiline düşer. - Dolaşma derinliği, çözme bütçesi ve yük boyutu üzerinde dahili güvenceler. Meta veriler, anahtarı dosyanın boyutunu ve tarihini içeren bir transient'te önbelleklenir: aylık indirmenizi değiştirmek önbelleği kendiliğinden geçersiz kılar.
registered_countryverepresented_countrybilerek yok sayılır. Bunlar anonim proxy, VPN ve uydu aralıklarının belgelenmiş biçimidir; orada kayıt ülkesi, ziyaretçiyi değil, bloğun sağlayıcı tarafından kaydedildiği yeri gösterir. Onları kullanmak, ABD VPN'i arkasındaki bir AEA ziyaretçisini opt-out rejimine sokardı.- Başka bir eklenti zaten bir GeoIP2 okuyucusu yüklüyorsa, o okuyucu ev yapımı okuyucudan sonra yedek olarak kullanılır.
Dosya nereye konur: wp-content/uploads/ow-geoip/GeoLite2-Country.mmdb. Yol,
owc_geo_mmdb_path ile filtrelenebilir ve dizin geçişine karşı doğrulanır.
Önemli sınır: eklenti veritabanını indirmez ve hiçbir yükleme ekranı sunmaz. Dosyayı MaxMind'dan kendiniz almalı, kendiniz koymalı ve kendiniz güncellemelisiniz. Buna karşılık MaxMind'a hiçbir şey gönderilmez: arama tamamen yereldir, IP adresi yalnızca arama noktası olarak kullanılır ve sonrasında açıkça imha edilir — asla günlüklenmez, asla saklanmaz, asla çereze yazılmaz.
Bölgesel tespitin sınırları
- Varsayılan olarak kapalıdır ve MaxMind seçeneği sizin sağladığınız bir dosyayı ister.
- Proxy'nizi bildirmediğiniz sürece ülke başlıkları yok sayılır.
- ABD'de eyalet eyalet, Kanada'da vilayet vilayet ayrım yoktur.
- Ziyaretçinin rejimi JavaScript'e ve 24 saatlik çereze bağlıdır.
us_genericprofili asla otomatik olarak atanmaz.
OW Forms entegrasyonu
Tam kapsam: bu entegrasyon kardeş eklenti OW Forms'u hedefler, başka hiçbir şeyi değil. Contact Form 7, Gravity Forms veya WPForms entegrasyonu yoktur.
Ayar: forms_integration_enabled, varsayılan olarak açık, ama OW Forms etkin değilse
entegrasyon hiçbir şey yapmaz.
Neler getirir
1. Rıza ↔ gönderim bağlantısı. Saklanan her gönderimde, OW Consent'e ait özel bir tabloya — OW Forms'un şemasına asla dokunulmaz — şunları içeren bir satır yazılır:
- ziyaretçinin takma adlı token'ı (32 onaltılık, asla e-posta adresi değil);
- bu token için en son kayıt defteri girdisinin tanımlayıcısı;
- verilen kategoriler ve yürürlükteki uyumluluk profili;
- o andaki yayımlanmış belgelerin tam özeti;
- rızanın zaman damgası;
- formdaki GDPR kutusunun durumu ve taşıdığı tam etiket.
Pratikte en yararlı olan son maddedir: yalnızca kutunun işaretli olduğunu değil, yanında ne yazdığını da ispatlayabilirsiniz.
2. Silme zinciri. Doğrulanmış bir silme talebi, silmeyi OW Forms'un rutinine devreder — o da yüklenen dosyaları da siler — ardından bağlantı satırlarını siler. Entegrasyon, OW Forms'un aynı eyleme kendi dinleyicisini bağlayıp bağlamadığını tespit eder; bağlamışsa yalnızca kendi bağlantılarını budamakla yetinir.
3. WordPress'in gizlilik araçları. Bir dışa aktarıcı ve bir silici kaydedilir; böylece Araçlar → Kişisel Verileri Dışa Aktar / Sil, OW Forms gönderimlerini kapsar — ve aynı kancaları dolaştığı için OW Consent'in haklar portalını da. Dışa aktarma, alanların gerçek etiketlerini kullanır ve rıza alanlarını ekler. Dışa aktarılan her değer, elektronik tablo formül enjeksiyonuna karşı etkisizleştirilir ve kırpılır.
4. Saklama. Günlük cron üzerinde, retention_form_data_days süresinden
(varsayılan 1095 gün, sınırlar 1–3650) eski bağlantılar 500'lük gruplar halinde silinir;
öksüz kalanlar için de bir tarama yapılır. Yalnızca OW Consent'in satırlarına dokunulur:
gönderimlerin kendi saklama süresi OW Forms'a aittir.
Sınırlar
- Zincirlenmiş kayıt defterine hiçbir gönderim olayı yazılmaz. Bağlantı satırı var olan bir girdiye atıf yapar, yeni bir girdi oluşturmaz — zincir dışarıdan yazılmamalıdır.
- OW Forms gönderimleri saklamayacak şekilde yapılandırılmışsa bir gönderim bağlanamaz: tutunulacak hiçbir satır yoktur.
- Geriye dönük kurtarma yoktur: bağlantı, güncellemeden sonraki ilk gönderimle başlar.
- Eşleştirme, OW Forms'un hesapladığı tuzlanmış adres özeti üzerinden yapılır; yedek olarak OW Forms'un ayrıca sakladığı açık adres kullanılır. Bu sıfır bilgi ifşası olan bir şema değildir: kişiye yanıt verebilmek gerektiği için adres OW Forms tarafında açık kalır.
- Entegrasyon, OW Forms eklentisini, tablolarını ya da seçeneklerini asla değiştirmez.
- OW Forms etkin ama silme rutinini açacak kadar yeni değilse, silici gönderimlere dokunulmadığını açıkça bildirir.
Yüzen düğme
Küçük ve kalıcı bir düğme, tercih panelini her an yeniden açmayı sağlar. Bu, 7(3) maddesinin — geri çekme, rıza vermek kadar basit kalmalıdır — ve her sayfadan erişilebilir bir mekanizma isteyen CNIL 2020-091 sayılı kararın gereğidir.
Var olma koşulları
İki ayarı birden ister: floating_button_enabled ve banner_enabled. Tercih paneli
ve JavaScript API'si banner'ın çalışma zamanında yaşar; o olmadan düğme, hiçbir şey yapmayan
bir denetim öğesi olurdu.
Ayrıca yönetimde, bir beslemede, robots.txt üzerinde ve wp_head tetiklenmemişse çıkar.
Seçenekler
| Ayar | Değerler | Varsayılan |
|---|---|---|
floating_button_enabled | boole | true |
floating_button_position | bottom-left, bottom-right, top-left, top-right | bottom-left |
floating_button_style | pill, icon | pill |
floating_button_label | serbest metin | Cookies |
Düğmenin kendine ait bir tema ayarı yoktur: iki yüzey aynı paleti izlesin diye
banner_style değerini devralır.
Davranış ve erişilebilirlik
Gerçek bir <button> öğesidir, dolayısıyla klavyeyle erişilebilir. aria-haspopup="dialog"
ve çevrilebilir ama yapılandırılamaz bir aria-label taşır (“Manage my cookie choices”):
yalnızca görünür etiket ayarlanabilir. icon modunda etiket görsel olarak gizlenir ama ekran
okuyucular tarafından okunmaya devam eder.
hidden niteliğiyle render edilir; gösterip göstermemeye JavaScript karar verir. Banner ya
da panel zaten ekrandayken hariç, tüm durumlarda görünür — geçerli sayfada bir seçim
yapıldıktan hemen sonra da dahil.
Bir tıklama tercih panelini açar. Banner API'si yoksa düğme #owc-preferences parçasına
düşer; bu zaten geçerli parça ise olayı elle yeniden tetikler.
z-index 99990, baskıda gizli, zorunlu kontrast modu ve prefers-reduced-motion desteği,
üst konumda yönetim çubuğunun altına kaydırma.
Kısa kodlar
Eklenti iki kısa kod bildirir, o kadar. Ne banner'ın ne de yüzen düğmenin kısa kodu vardır: ikisi de ayarlarıyla yönetilir ve ya her yerde görünür ya da hiçbir yerde.
[owc_dsar_form] — haklar portalı
[owc_dsar_form]
[owc_dsar_form types="access,erasure,portability" title="Haklarım" submit_label="Gönder"]
| Nitelik | Varsayılan |
|---|---|
types | access,rectification,erasure,portability,restrict,object,optout |
title | “Kişisel verilerim üzerindeki haklarımı kullanmak istiyorum” |
submit_label | “Talebimi gönder” |
İstenen türler, sunucunun kabul ettikleriyle kesiştirilir. withdraw türü form tarafından
asla sunulmaz; bkz. Haklar portalı.
[owc_dnsmpi] — CCPA opt-out'u
[owc_dnsmpi]
[owc_dnsmpi label="Kişisel bilgilerimi satmayın ve paylaşmayın" class="altbilgi-baglantisi"]
| Nitelik | Varsayılan |
|---|---|
label | “Do Not Sell or Share My Personal Information” |
class | owc-dnsmpi |
Bir tıklama opt-out'u uygular; bkz. CCPA opt-out'u.
ccpa_inject_footer ayarını açık bırakırsanız bağlantı zaten alt bilgiye eklenmiştir ve bu
kısa kod yalnızca onu başka bir yere koymak için işe yarar.
Paneli bir menüden ya da bağlantıdan yeniden açmak
Bunun için kısa kod yoktur, çünkü bir sınıf niteliği yeter:
<a href="#owc-preferences" class="owc-open-preferences">Çerezlerimi yönet</a>
<button type="button" data-owc-open>Tercihlerim</button>
<a href="#owc-dnsmpi" data-owc-dnsmpi="1">Bilgilerimi satmayın</a>
Alt bilgi menünüze bir “Çerezler” girişi eklemenin önerilen yolu budur.
REST API
Tüm rotalar, olağan REST kökünde (https://example.com/wp-json/owc/v1/…) owc/v1 ad alanı
altında yaşar. Toplam on üç rota: REST modülünün kaydettiği on iki rota, artı TCF modülünün
kaydettiği sağlayıcı listesi rotası.
Herkese açık rotalar
Kimlik doğrulama yoktur. Güvenlikleri; kaynak denetimine, eklentiye özgü bir token'a ve aşağıda anlatılan hız sınırlarına dayanır.
| Metot | Yol | Parametreler | Görevi |
|---|---|---|---|
GET | /nonce | action (varsayılan wp_rest) | Taze bir token döndürür. Yanıt: {nonce, action, header: "X-OWC-Nonce", ttl: 43200}, no-store ve Vary: Cookie ile |
POST | /consent | event (varsayılan save_preferences), source (varsayılan banner), categories (zorunlu), page_url (varsayılan ''), cookie_unreadable (boole, varsayılan false) | Bir seçimi kaydeder, çerezi koyar ve kayıt defteri satırını yazar |
GET | /state | — | Yalnızca çağıranın durumu: {given, categories, profile, at}. Asla ziyaretçi token'ı, asla IP, asla sayfa URL'si. no-store + Vary: Cookie |
GET | /tcf/gvl | — | Önbellekteki Global Vendor List'i sunar. ETag, Cache-Control: public, max-age=86400, koşullu istekte 304, önbellekte hiçbir şey yoksa 503 + Retry-After: 300 |
POST | /dsar | type (zorunlu), email (zorunlu, e-posta biçimi), message (varsayılan '', en fazla 2000 karakter) | Bir hak talebi bırakır. Yanıt {ok, mail_sent, message} — asla tanımlayıcı değil |
Kabul edilen değerler:
event:accept_all,reject_all,save_preferences,withdraw,auto,gpc_opt_outsource:banner,preferences,footer_link,api,autotype(DSAR):access,rectification,erasure,portability,restrict,object,optout,withdrawcategories: bir nesne, en fazla 32 girdi, yalnızca skaler değerleraction(nonce): yalnızcawp_rest
Yönetim rotaları
Hepsi manage_options yetkisini ister.
| Metot | Yol | Parametreler | Görevi |
|---|---|---|---|
GET | /ledger | page (≥1, varsayılan 1), per_page (1–200, varsayılan 50), visitor_token (32 onaltılık), from, to | Kayıt defterini okur. Gerçekten uygulanan filtreler yanıtta döndürülür |
GET | /ledger/verify | — | Zinciri baştan sona doğrular |
GET | /settings | — | Etkin ayarlar |
POST | /settings | serbest JSON gövdesi | Ayarları yazar. Yanıt {ok, updated, rejected, settings} |
POST | /scanner/run | — | Bir tarama başlatır |
POST | /scanner/ingest | JSON gövdesi {page, findings[]} | Sondanın gözlemlerini alır |
GET | /scanner/findings | page, per_page (1–200, varsayılan 50), filter (kategori slug'ı veya unknown) | Bulguları listeler |
POST | /policies/generate | type (zorunlu), publish (boole, varsayılan false) | Bir belge üretir |
GET | /policies/preview | type (zorunlu) | Bir belgeyi önizler |
/scanner/ingest ayrıca X-WP-Nonce başlığında ya da _wpnonce parametresinde geçerli
bir wp_rest nonce'u ister — çünkü sendBeacon başlık koyamaz.
Yazma modundaki /settings yalnızca gerçek ayar olarak bildirilmiş anahtarları kabul eder:
bir filtre, ayar olmayan sentetik anahtarlar enjekte edebilir. Her değer tek tek
temizlenir. Hiçbir bilinen anahtarın olmaması 400 verir.
/ledger, başka bir yerde filtrelenmiş bir permission_callback ihtimaline karşı derinlemesine
savunma olarak yetkiyi işleyicinin içinde yeniden test eder.
Herkese açık yazmaların güvenlik modeli
Başlangıç tespiti basittir: bir nonce, önbelleklenebilir HTML'de yaşayamaz. Bu yüzden
/consent ve /dsar rotalarının erişim denetimi izin verici olup, sırası önemli olan dört
katmanla korunur.
- Aynı ana bilgisayar kaynak denetimi. Bedava, belirlenimci, hiçbir bütçe tüketmez.
X-OWC-Noncebaşlığındaki eklentiye özgü token — bu bir kanıttır, asla veto değil.X-WP-Noncekullanmama kararı bilinçlidir: WordPress çekirdeği bu başlığı her türlü rota erişim denetiminden önce yakalar ve doğrulayamazsa isteğin tamamını reddeder. Bir önbellekten gelen süresi geçmiş bir token, uç noktanın hiç token olmadan kabul edeceği bir yazmayı böylece öldürürdü.- Kapalı tarafa düşme: ne kaynak ne de doğrulanmış token varsa 403
owc_missing_origin. - Hız sınırı en sonda. En başta olsaydı, hatalı bir yapılandırma her tıklamada iki token tüketir ve 429 ile biterdi; bu da yapılandırma hatasını bir hız sınırının arkasına gizlerdi.
Kabul edilen ana bilgisayarlar: WordPress'in bildirdikleri (site URL'si, WordPress URL'si,
REST kökü) ve bunların www./apex ikizleri, artı geçerli isteğin Host başlığındaki ana
bilgisayar ve onun ikizi. “Aynı kaynak”, “WordPress'in veritabanında yazana uyuyor” değil,
“kaynak, tarayıcının bağlandığı ana bilgisayara uyuyor” demektir — aksi halde bir önizleme
alan adıyla, bir takma adla, bir ön üretim adıyla, çoklu sitede eşlenmiş bir alan adıyla ya
da Host başlığını yeniden yazan bir proxy arkasından erişilen her site, kendi kendini
onaramadan sessizce reddedilirdi. Filtre: owc_allowed_request_hosts.
CORS bilerek WordPress çekirdeğine bırakılmıştır.
/nonce JSONP biçimini açıkça reddeder: bu ret olmasaydı üçüncü taraf bir sayfa, kaynak
denetimine tabi olmayan basit bir <script src> ile oradan geçen bir yöneticinin canlı
token'ını toplayabilirdi.
Hız sınırları
| Bölme | Bütçe | Pencere | Anahtar |
|---|---|---|---|
nonce | 120 | 5 dakika | IP adresi |
consent | 30 | 5 dakika | IP adresi |
dsar | 3 | 1 saat | IP adresi |
dsar_email | 3 | 24 saat | hedeflenen e-posta adresi |
dsar_global | 30 | 1 saat | tüm site |
gpc | 30 | 1 saat | IP adresi |
tcf_gvl | 10 | 1 saat | IP adresi |
- Sabit pencere, kayan değil: trafik alan bir bölmenin süresi eninde sonunda dolar.
- Saklanan anahtar tuzlanmış bir özettir: seçeneklerde ya da nesne önbelleğinde açık biçimde hiçbir IP ya da e-posta adresi bulunmaz.
- IP normalleştirme: IPv4 korunur, IPv6 /64'e kırpılır — arayüz tanımlayıcısının her bitini istemci kontrol ettiğinden, tam bir anahtar her istekte yeni bir bütçe yaratmayı mümkün kılardı.
- Paylaşılan kimlik:
OWC_TRUSTED_PROXYile bildirilmemiş bir CDN ya da proxy arkasında tüm ziyaretçiler aynı adresle gelir. Bütçe o zaman ziyaretçi başına bölünür ve paylaşılan adres üzerinde genişletilmiş bir sayaç tutulur. Bu daha kaba bir sınırdır: proxy'nizi bildirin. owc_throttle_max( $max, $bucket, $window )filtresi —0döndürmek sınırı kapatır.- Nesne önbelleği kullanılamıyorsa sınırlayıcı açık tarafa düşer: birinin haklarını kullanmasını engellemektense sınırlamamak yeğdir.
/consent rotası ayrıntılı olarak
headers_sent()en başta okunur. Çıktı çoktan başladıysa sunucu çerezi konulamaz: satır yine de yazılır ve yanıt 200 kalır,cookie_set: falseile ve istemcinin kendisinin koyacağı bircookietanımlayıcısıyla (name,value,ttl,path,samesite,secure).- Sitenin sunmadığı kategoriler sessizce yok sayılmaz,
dropped_categoriesiçinde döndürülür. page_url, sitenin ana bilgisayarlarına karşı doğrulanır; yedek olarak aynı şekilde doğrulanmış birReferer, o da yoksa boş dize kullanılır. Anahtar her zaman vardır; böylece kayıt defteri hamRefererdeğerini aramaya gitmez.- Kayıt defteri açıksa ve yazma reddedilirse çerez iptal edilir ve yanıt 503
owc_ledger_write_refusedolur. Hiçbir şey saklanmaz, hiçbir izleyici serbest bırakılmaz. cookie_unreadablesaf telemetridir: ona hiçbir doğrulama denetimi uygulanmaz; tam da bir tanı alanının bir rıza yazmasını asla reddedememesi için. Tek etkisi, ret günlüğüne düşülen bir nottur.
Tipik yanıt: {ok, state, dropped_categories, logged, cookie_set[, cookie]}. Kayıt defteri
kapalıyken logged alanı null olur.
Hata kodları
| Kod | HTTP | Anlamı |
|---|---|---|
owc_bad_param | 400 | Geçersiz parametre |
owc_bad_categories | 400 | Hatalı biçimli, çok büyük ya da skaler olmayan categories nesnesi |
owc_bad_email | 400 | Geçersiz e-posta adresi |
owc_bad_dsar | 400 | Hatalı biçimli DSAR gönderimi (bot tuzağı dahil) |
owc_dsar_not_attested | 400 | Md. 12.6 beyanı yok |
owc_no_settings | 400 | Gövdede hiçbir bilinen ayar anahtarı yok |
owc_missing_origin | 403 | Ne kaynak ne token: kapalı tarafa düşme |
owc_bad_origin | 403 | Bildirilen kaynak bu sitenin bir ana bilgisayarı değil — yanıt, kabul edilen en fazla on ana bilgisayarı listeler |
owc_bad_nonce | 403 | /scanner/ingest üzerinde geçersiz nonce |
owc_jsonp_forbidden | 403 | /nonce üzerinde JSONP biçimi reddedildi |
owc_forbidden | 401/403 | Yetersiz yetki |
owc_dsar_disabled | 404 | Haklar portalı sunucu tarafında kapalı |
owc_no_template | 404 | Bu tür ve bu profil için şablon yok |
owc_rate_limited | 429 | Hız sınırına ulaşıldı |
owc_consent_failed | 500 | Rızanın uygulanması başarısız |
owc_dsar_store_failed | 500 | Talebin yazılması başarısız |
owc_gen_failed | değişken | Belge üretimi reddedildi (eksik alanlar, dil bariyeri) |
owc_ledger_write_refused | 503 | Kayıt defteri yazmayı reddetti — hiçbir şey kaydedilmez, hiçbir şey serbest bırakılmaz |
Ret günlüğü
Son yirmi yazma reddi saklanır ve kontrol panelinde gösterilir — yalnızca günlük boş değilse. Orada iki tür ayırt edilir:
- HTTP durumu olan bir girdi gerçek bir reddir: hiçbir şey saklanmamıştır ve ziyaretçi bir hata görmüştür;
- durumu 0 olan bir girdi bir uyarıdır: seçim aslında kaydedilmiştir.
Panel, kaynağın bildirdiği ana bilgisayarı ve isteğin Host başlığını yan yana gösterir.
WordPress bir ana bilgisayarla yapılandırılmışken ziyaretçilerinizin başka bir ana bilgisayarda
gezinmesi durumunda farklı olan tam olarak budur — “kaydedilmeyen” bir rızanın en sık
nedeni.
API'nin sınırları
/consentve/dsar, tasarım gereği anonim yazmalar kabul eder; koruma bir nonce değil, kaynak artı hız sınırıdır.- Nesne önbelleği yoksa hız sınırlayıcı açık tarafa düşer.
- Rıza çerezi yalnızca ana bilgisayara özeldir: apex için konulan bir çerez bir
www.sayfasından okunamaz ve hiçbir CORS başlığı bunu düzeltemez. Çare, aynı kaynaklı bir yazma URL'sidir. /scanner/ingestyalnızcamanage_optionskabul eder: sonda bir ziyaretçiden gelemez./settingsrotasının kendi nonce'u yoktur:manage_optionsyetkisi artı çekirdeğin çerez tabanlı nonce denetimi vardır.
Ayar referansı
Tüm ayarlar tek bir seçenekte, owc_settings içinde tutulur; her ön yüz sayfasında
okunduğu için otomatik yüklenir.
PHP'de okuma ve yazma
$ayarlar = OWC_Core::settings(); // etkin ayarlar (varsayılanlar + kayıtlılar + filtreler)
$profil = OWC_Core::setting( 'compliance_profile' );
$ham = OWC_Core::stored_setting( 'compliance_profile' ); // ziyaretçi bazlı yeniden yazımı yok sayar
OWC_Core::update_settings( array(
'consent_renewal_months' => 6,
'compliance_strict' => true,
) );
update_settings(), var olanın üzerine yalnızca gönderilen anahtarları birleştirir,
varsayılanların tamamını asla. Siz hiçbir şeyi özelleştirmediğiniz sürece seçenek satırının
boş kalmasını, dolayısıyla metinlerin sitenin dilini izlemesini sağlayan da budur.
settings() sonucu belleğe alınır ve anahtarı owc_settings filtresinin tüm geri
çağırmalarına dayanır: filtresini ilk okumadan sonra kaydeden bir modül, yok sayılmak yerine
belleği geçersiz kılar. Bellek, seçenek her yazıldığında boşaltılır.
Varsayılan değerler
[
// Banner
'banner_enabled' => true,
'banner_position' => 'bottom-bar', // bottom-bar | bottom-card | center-modal | top-bar
'banner_style' => 'auto', // auto | light | dark
'banner_accept_all' => true,
'banner_reject_all' => true,
'banner_preferences' => true,
'banner_close_x' => false, // çarpı = zımni ret
'banner_show_logo' => true,
'text_title' => 'We use cookies',
'text_message' => 'We use cookies to personalise content, measure audience, '
. 'and provide social media features. You can accept or reject, '
. 'and change your choice at any time.',
'text_accept_all' => 'Accept all',
'text_reject_all' => 'Reject all',
'text_preferences' => 'Customize',
'text_save' => 'Save my choices',
// Yüzen düğme
'floating_button_enabled' => true,
'floating_button_position' => 'bottom-left',
'floating_button_style' => 'pill',
'floating_button_label' => 'Cookies',
// Rıza
'consent_renewal_months' => 12, // 0 değeri « asla » değil, 13 olur
'consent_policy_hash_check' => true,
// Uyumluluk
'compliance_profile' => 'gdpr',
'compliance_strict' => true,
'geo_enabled' => false,
'geo_default_profile' => 'gdpr',
'geo_mmdb_enabled' => false,
// IAB TCF v2.2
'tcf_enabled' => false,
'tcf_cmp_id' => 0,
'tcf_publisher_country' => 'FR',
'tcf_publisher_purposes_li' => [],
'tcf_special_features' => [],
// CCPA / GPC
'ccpa_inject_footer' => true,
'gpc_honor' => true,
// Google Consent Mode v2
'gcm_enabled' => true,
'gcm_ads_data_redaction' => true,
'gcm_url_passthrough' => true,
// Kategoriler
'cat_necessary_available' => true,
'cat_functional_available' => true,
'cat_analytics_available' => true,
'cat_marketing_available' => true,
'cat_preferences_available' => true,
'cat_social_available' => true,
'cat_necessary_label' => 'Necessary',
'cat_necessary_desc' => 'Strictly required for the site to function …',
'cat_functional_label' => 'Functional',
'cat_functional_desc' => 'Enhance the experience (chat, embedded videos, maps) …',
'cat_analytics_label' => 'Statistics',
'cat_analytics_desc' => 'Help us understand how you use the site (anonymously) …',
'cat_marketing_label' => 'Marketing',
'cat_marketing_desc' => 'Enable us to show you ads and content tailored …',
'cat_preferences_label' => 'Preferences',
'cat_preferences_desc' => 'Remember your interface choices (layout, saved filters).',
'cat_social_label' => 'Social & embeds',
'cat_social_desc' => 'Allow embedded social content (YouTube, Instagram, X) to load.',
// Kayıt defteri
'ledger_enabled' => true,
'ledger_retention_days' => 1825, // 5 yıl ; 0 = sınırsız
'ledger_hash_algo' => 'sha256',
// Tarama aracı
'scanner_enabled' => false,
'scanner_frequency' => 'weekly',
'scanner_alert_email' => '',
'scanner_max_urls' => 25,
'scanner_timeout' => 8,
'scanner_probe_mode' => 'admins',
// Haklar portalı
'dsar_enabled' => true,
'dsar_email' => '',
'dsar_response_days' => 30,
'dsar_notify_email' => '',
'dsar_token_ttl_days' => 7,
// Engelleme
'blocker_unknown_script_policy' => 'allow',
'blocker_unknown_iframe_policy' => 'block',
'blocker_allowlist' => '', // satır başına bir ana bilgisayar
'blocker_block_resource_hints' => true,
// Entegrasyon ve yaşam döngüsü
'forms_integration_enabled' => true,
'auto_footer_menu_inject' => false,
'delete_data_on_uninstall' => false,
// Yasal kimlik
'legal_company_name' => '',
'legal_company_legal_form' => '',
'legal_company_capital' => '',
'legal_company_address' => '',
'legal_company_email' => '',
'legal_company_phone' => '',
'legal_country' => 'FR',
'legal_company_reg_number' => '',
'legal_company_reg_place' => '',
'legal_company_vat' => '',
'legal_publication_director' => '',
'legal_eu_representative' => '',
'legal_host_name' => '',
'legal_host_address' => '',
'legal_host_phone' => '',
'legal_host_url' => '',
'legal_profession_body' => '',
'legal_profession_title' => '',
'legal_profession_state' => '',
'legal_profession_rules' => '',
'legal_mediator_name' => '',
'legal_mediator_address' => '',
'legal_mediator_url' => '',
'legal_dpo_name' => '',
'legal_dpo_email' => '',
'legal_dpa_authority' => '', // bilerek boş : ülke + profilden türetilir
'legal_transfer_countries' => '',
'legal_third_parties_note' => '',
'legal_automated_decisions' => false,
'legal_automated_decisions_desc' => '',
'legal_minor_age' => 15,
'legal_data_provision_note' => '',
'legal_currency' => 'EUR',
'legal_tax_label' => 'TTC',
'legal_business_type' => 'auto',
'retention_form_data_days' => 1095,
'retention_dsar_days' => 1095,
'policy_disclaimer' => true,
// Bağlantılar
'link_privacy_policy' => '',
'link_cookie_policy' => '',
'link_terms' => '',
'link_legal_notice' => '',
]
Kapalı listeler
Liste dışı bir değer varsayılana geri çekilir.
| Ayar | Kabul edilen değerler |
|---|---|
banner_position | bottom-bar, bottom-card, center-modal, top-bar |
banner_style | auto, light, dark |
floating_button_position | bottom-left, bottom-right, top-left, top-right |
floating_button_style | icon, pill |
compliance_profile, geo_default_profile | gdpr, ccpa, lgpd, popia, pipl, dpdp, quebec, uk_pecr, ch_nfadp, au, us_generic |
ledger_hash_algo | sha256, sha3-256 (PHP'nin desteklediğiyle kesiştirilir) |
scanner_frequency | hourly, twicedaily, daily, weekly |
scanner_probe_mode | admins, off |
legal_business_type | auto, vitrine, rental, ecommerce, services, saas, content |
blocker_unknown_script_policy, blocker_unknown_iframe_policy | allow, block |
Tam sayı sınırları
| Ayar | Sınırlar |
|---|---|
consent_renewal_months | 0–13 (0, 13 gibi işlenir) |
dsar_response_days | 1–30 |
dsar_token_ttl_days | 1–90 |
ledger_retention_days | 0–3650 (0 = sınırsız) |
scanner_max_urls | 1–500 |
scanner_timeout | 1–60 |
legal_minor_age | 13–18 |
retention_form_data_days | 1–3650 |
retention_dsar_days | 1–3650 |
tcf_cmp_id | 0–4095 |
Temizleme
text_message, zengin HTML kabul eden tek alandır; bir WordPress yazısında izin verilen HTML'i kabul eder, banner ise sonuçta yalnızca<a href target rel>render eder.- Çok satırlı alanlar:
legal_company_address,legal_eu_representative,legal_host_address,legal_mediator_address,legal_third_parties_note,legal_automated_decisions_desc,legal_data_provision_note,blocker_allowlistve_descile biten her anahtar. - URL'ler:
link_önekli ya da_urlsonekli her anahtar, artılegal_profession_rules. - E-posta adresleri: içinde
emailgeçen her anahtar. - Geri kalan her şey: düz metin.
- Skaler bir ayara gönderilen skaler olmayan bir değer yok sayılır, anahtar yazılmaz.
Ne nerede ayarlanır
| Sekme | Ayarlar |
|---|---|
| Banner | banner_*, text_*, floating_button_*, consent_renewal_months, consent_policy_hash_check |
| Compliance | compliance_profile, compliance_strict, gcm_*, blocker_*, ccpa_inject_footer, gpc_honor, tcf_*, geo_*, auto_footer_menu_inject, forms_integration_enabled, delete_data_on_uninstall, link_* |
| Legal identity | legal_*, retention_form_data_days, retention_dsar_days, policy_disclaimer |
| Categories | cat_*_available, cat_*_label, cat_*_desc |
| Audit ledger | ledger_enabled, ledger_retention_days (algoritma gösterilir, değiştirilemez) |
| Scanner | scanner_* |
| DSAR requests | dsar_* |
Tablolar
| Tablo | İçerik |
|---|---|
{prefix}owc_ledger | Zincirlenmiş rıza kayıt defteri |
{prefix}owc_dsar | Hak talepleri |
{prefix}owc_scanner | Tarama aracının bulguları |
{prefix}owc_scripts | Engellemenin imza kataloğu |
{prefix}owc_form_links | Rıza ↔ OW Forms gönderimi bağlantıları |
owc_table( 'ledger' | 'dsar' | 'scanner' | 'scripts' ) PHP yardımcısı, adı geçerli
önekten yeniden hesaplar: sabitler istek süresince dondurulduğundan, bir switch_to_blog()
içinde bunu kullanın.
Diğer seçenekler ve transient'ler
Seçenekler: owc_settings, owc_version, owc_pending_upgrade, owc_upgrade_lock,
owc_ledger_head, owc_ledger_trim, owc_ledger_key_source, owc_scanner_secret,
owc_scanner_lock, owc_scanner_queue, owc_scanner_status, owc_scanner_alerted,
owc_scanner_probe_status, owc_scanner_manual, owc_refusal_log, owc_tcf_status,
owc_tcf_gvl_version, owc_forms_db_version, artı geçiş bayrakları
(owc_catalog_sanitized_v2, owc_match_target_migrated_v1, owc_ledger_hmac_migrated_v1,
owc_inline_sig_labels_cleaned_v1, owc_scanner_secret_rotated_v1).
Transient'ler: owc_catalog_<sürüm>, owc_invalid_patterns, owc_gvl_cache,
owc_gvl_stub, owc_gvl_etag, owc_gvl_retry, owc_mmdb_<özet>, owc_policies_hash,
owc_site_analysis, owc_scanner_last_run, owc_scanner_run_result,
owc_scanner_pruned, owc_scanner_fail_alerted, owc_ledger_verify_result,
owc_ledger_write_error, owc_policy_gen_result, owc_dsar_sla_alert,
owc_dsar_admin_result ve hız sınırlama sayaçları.
wp-config.php içinde tanınan sabitler
| Sabit | Etkisi |
|---|---|
OWC_LEDGER_KEY | Kayıt defterinin HMAC anahtarı ve bölgesel tespit çerezinin türetilmiş anahtarı |
OWC_TRUSTED_PROXY / OWC_TRUSTED_PROXIES | Güvenilen proxy'lerin CIDR aralıkları; bunlar olmadan istemci IP başlıkları yok sayılır |
OWC_GEO_TRUSTED_HEADERS | cloudflare, cloudfront, proxy veya all |
OWC_BEHIND_CLOUDFLARE | Cloudflare ülke başlığı için kısayol |
OWC_BEHIND_CLOUDFRONT | CloudFront ülke başlığı için kısayol |
Geliştirici kancaları
Filtreler
| Filtre | Görevi |
|---|---|
owc_settings | Etkin ayarlar. Yanıt, istek boyunca kararlı bir şeye dayanmalıdır |
owc_banner_texts | Banner metinleri |
owc_bootstrap_config | <head> içine basılan statik yapılandırma — asla ziyaretçi bazlı veri |
owc_scripts_catalog | Doğrulamadan önceki katalog satırları |
owc_blocker_allowlist | Asla engellenmeyecek ana bilgisayarlar |
owc_scanner_urls | Taranacak URL'ler (sonrasında yeniden sitenin ana bilgisayarıyla sınırlandırılır) |
owc_throttle_max | Bir hız sınırının bütçesi; 0 onu kapatır |
owc_allowed_request_hosts | Herkese açık bir yazma için kabul edilen ana bilgisayarlar |
owc_allow_headerless_write | Kaynaksız yazmalarda kapalı tarafa düşmeyi kaldırır (varsayılan false) |
owc_geo_mmdb_path | MaxMind veritabanının yolu |
owc_tcf_purpose_map | Kategori → TCF amacı eşlemesi |
owc_tcf_stub_config | TCF stub'ının statik yapılandırması |
owc_policy_template | Bir şablonun ham gövdesi — dil kilidini devre dışı bırakır |
owc_policy_vars | Bir belgenin değişkenleri |
owc_policy_html | Bir belgenin nihai HTML'i |
owc_dsar_types | Sunulan ve kabul edilen talep türleri |
owc_dsar_form_notice | Formun altındaki bilgilendirme |
owc_dsar_export_bundle | Taşınabilirlik paketinin içeriği |
owc_dsar_show_fulfilment_panel | Uygulama panelinin gösterilmesi |
Aksiyonlar
| Aksiyon | İmza |
|---|---|
owc_consent_updated | ( array $categories, string $event, string $source ) |
owc_consent_cookie_not_sent | ( array $cookie, string $event ) |
owc_ledger_lock_failed | ( string $event, string $token ) |
owc_ledger_write_failed | ( $error, string $event, string $token ) |
owc_ledger_anchor | ( array $anchor ) |
owc_ledger_pruned | ( int $deleted, int $days ) |
owc_catalog_updated | — |
owc_gpc_honored | ( array $categories ) |
owc_tcf_inactive | ( string $reason ) |
owc_dsar_submitted | ( string $type, string $email, string $message ) |
owc_dsar_verified | ( int $id, array $row ) |
owc_dsar_fulfilled | ( int $id, string $what, $trace ) |
owc_dsar_mail_failed | ( int $id, string $email, string $kind ) |
Cron'lar: owc_daily_maintenance, owc_ledger_retention, owc_scanner_run,
owc_scanner_run_batch, owc_tcf_refresh_gvl, owc_run_upgrade.
Uluslararasılaştırma
Çeviri alanı ow-consent, yolu /languages. Kaynak dil İngilizcedir. Paket,
ow-consent.pot şablonunu ve eksiksiz bir Fransızca çeviriyi içerir.
Yukarıda anlatılan mekanizmanın hatırlatması: bir etiket ya da bir banner metni ayarlarda özelleştirilmediği sürece sitenin dilini izler. Kendi değerinizi girdiğiniz anda, ziyaretçinin dili ne olursa olsun o değer olduğu gibi sunulur.
Yasal belgelerin gövdeleri bu mekanizmadan geçmez: dilleri, yöneticinin yerel ayarını değil, yargı bölgesini izler.
Sorun giderme
Banner görünmüyor
Listeyi sırayla gözden geçirin:
banner_enabledaçık mı? Yönetim ekranının üstündeki rozet bunu söyler.- Temanız
wp_head()vewp_footer()çağırıyor mu? Onlar olmadan banner, etkisiz bir işaretleme üretmek yerine basılmayı reddeder. - Ziyaretçi daha önce bir seçim yaptı mı? Banner yalnızca
<html data-owc="none">durumunda görünür. Gizli pencerede ya dawindow.OWCBanner.reset()ile test edin. - Ziyaretçinin JavaScript'i var mı? Onsuz banner — bilerek — gizli kalır ve
<noscript>bloğu devreye girer. - Bir sayfa önbelleği, etkinleştirmeden önceki bir sürümü mü sunuyor? Boşaltın.
Seçim kaydedildiği halde banner her sayfada geri geliyor
Sıklık sırasına göre üç neden.
- Gezilen ana bilgisayar, WordPress'te yapılandırılandan farklı (
www.yerine apex, takma ad, ön üretim alan adı). O zaman WordPress 200 yanıtı verirken tarayıcı çerezi saklamayı reddeder. Kontrol panelini açın: ret günlüğü kaynağı veHostbaşlığını yan yana gösterir. Çare, siteyi tek bir kanonik ana bilgisayardan sunmaktır. consent_policy_hash_checkaçık ve belgeleriniz değişti — bu istenen davranıştır; politika değişikliğinden sonra ziyaretçiye yeniden sorulur.- 1.4.3 öncesi bir sürümdesiniz. O zamanlar çerez iki kez kodlanıyordu ve tarayıcı onu geri okuyamıyordu; oysa sunucu gayet iyi okuyordu. Güncelleyin: düzeltmeden önce yazılmış çerezler okunabilir kalır.
“Seçiminiz kaydedilemedi” — refused hatası ya da 403
Mesaj öğesindeki data-owc-code değerine ya da kontrol panelindeki ret günlüğüne bakın.
owc_bad_origin: bildirilen kaynak tanınan bir ana bilgisayar değil. Yanıt kabul edilen ana bilgisayarları listeler. Siteniz meşru olarak birden fazla adla erişiliyorsa bunlarıowc_allowed_request_hostsfiltresiyle ekleyin.owc_missing_origin: ne kaynak ne token var. Bu tipik olarak başlıkları silen bir gizlilik eklentisi ya da onları yeniden yazan bir proxy'dir.owc_bad_nonce: yalnızca tarama sondasını ilgilendirir, rıza yazmasını değil — nonce,/consentüzerinde asla bir veto değildir.
ratelimit hatası — 429
Sınırlar, herkese açık yazmalarda bilerek düşük tutulmuştur. İki neden:
- Bildirilmemiş bir CDN ya da proxy: tüm ziyaretçileriniz aynı adresle gelir ve aynı
bütçeyi paylaşır.
wp-config.phpiçindeOWC_TRUSTED_PROXYile bildirin. - Aynı adresten 5 dakikada 30'dan fazla yazma gönderen otomatik bir test.
503 owc_ledger_write_refused
Kayıt defteri yazmayı reddetti, dolayısıyla hiçbir şey kaydedilmedi ve hiçbir izleyici serbest bırakılmadı. Bu istenen davranıştır: ispatlanamayan bir rıza öne sürülmemelidir.
{prefix}owc_ledgertablosunun var olduğunu doğrulayın. Audit ledger sekmesi boş bir ekran yerine okunabilir bir “henüz kurulmadı” mesajı gösterir.- MySQL kullanıcısının yazma haklarını doğrulayın.
- Son çare olarak, hizmeti geri getirmek için
ledger_enabledayarını geçici olarak kapatın — bu süre boyunca kanıtı kaybettiğinizi bilerek.
Rızadan önce hâlâ izleyiciler yükleniyor
compliance_strictaçık mı? Onsuz yalnızca WordPress'in kuyruğa aldığı betikler işlenir.- İzleyici katalogda mı? Bilinmeyen bir üçüncü taraf betiğine varsayılan olarak izin verilir. Bir tarama başlatın, bulguyu sınıflandırın: bu, engelleme kuralını yazar.
- Birinci taraf JavaScript ile mi enjekte ediliyor? Dinamik koruma yalnızca yirmi ana bilgisayarı kapsar. İzleyicinin alan adı üzerine bir katalog kuralı ekleyin.
Set-Cookiebaşlığıyla bırakılan bir çerez mi? Hiçbir istemci engellemesi onu tutamaz. Kaynağında, sunucu tarafında ele alınmalıdır.blocker_unknown_script_policyayarınıblockyapın — sonra siteyi dikkatle test edin, çünkü bu ayar tanınmayan her üçüncü tarafı engeller.
Meşru bir entegrasyon engelleniyor
Ana bilgisayarını blocker_allowlist içine satır başına bir tane olacak şekilde ya da
owc_blocker_allowlist filtresiyle ekleyin. blocker_unknown_iframe_policy ayarını da
kontrol edin: bilinmeyen iframe'ler varsayılan olarak engellenir, en sık karşılaşılan
durum budur.
Entegrasyonun rızaya bağlı kalması gerekiyorsa onu doğru kategoriye yerleştirmeyi tercih edin: görsel yer tutucu, tek tıkla serbest bırakan bir “Kabul et …” düğmesi taşır.
Tarama aracı hiçbir şey bulmuyor
- Açık mı? Varsayılan olarak kapalıdır.
- WP-Cron çalışıyor mu?
DISABLE_WP_CRONtanımlıysa ve sistem cron'u yoksa planlı tarama hiç başlamaz. Doğrulamak için elle bir tarama başlatın. - HTTP loopback mümkün mü? Bir ön üretim HTTP kimlik doğrulaması ya da bir güvenlik duvarı taramayı engeller. Kapsam paneli ilk hatayı gösterir.
- Sunucu taraması hiç JavaScript çalıştırmaz. Bir etiket yöneticisinin enjekte ettiklerini sondanın bildirmesi için sitenin bir sayfasını oturum açmış yönetici olarak ziyaret edin.
Her durumda, sonuca varmadan önce “bu tarama gerçekte neyi kapsıyor” panelini okuyun: “hiçbir şey bulunamadı” ile “hiçbir şey okunamadı” ayrımını yapar.
Bir belgenin üretimi reddediliyor
İki olası neden var ve mesaj bunu söyler:
- Zorunlu alanlar boş — eksik anahtarların listesi gösterilir. Legal identity sekmesini tamamlayın.
- Dil bariyeri — Fransızca konuşmayan bir yargı bölgesi için yasal bilgiler ya da kullanım
ve satış koşulları istiyorsunuz. Bu durumda düğme gizlidir. Tek yol,
owc_policy_templatefiltresiyle kendi gövdenizi sağlamaktır.
DSAR doğrulama e-postası gelmiyor
Bu neredeyse her zaman teslim edilebilirlikle ilgilidir, eklentiyle değil.
- Gönderim başarısız olduğunda API yanıtı
mail_sent: falsetaşır ve form o zaman iletişim adresine yönlendiren özel bir mesaj gösterir. - Bir SMTP eklentisi kurun. PHP'nin
mail()fonksiyonu, alıcı sunucuların çoğu tarafından reddedilir. - Alan adınızın SPF, DKIM ve DMARC kayıtlarını doğrulayın. Eklenti gönderen adresini
asla yeniden yazmaz — SPF'yi bozacak olan budur — yalnızca bir
Reply-Tokoyar. dsar_emaildeğerinin geçerli bir adres olduğunu doğrulayın.
E-posta alınıp doğrulanmadığı sürece talep pending kalır ve yasal süre başlamaz.
TCF modülü etkinleşmiyor
Compliance sekmesini açın: bir yönetim uyarısı nedeni adlandırır.
missing_cmp_id:tcf_cmp_iddeğeri 0. IAB Europe'dan bir CMP ID almalısınız; eklenti bir tane sağlamaz ve tanımlayıcısı 0 olan bir dize yayımlamayı reddeder.- 4095'ten büyük CMP ID: değer, dizenin 12 bitlik alanına sığmaz ve başka bir CMP'yi işaret ederdi.
no_gvl: Global Vendor List henüz indirilmedi. Günlük bir cron ile gelir; WP-Cron'un çalıştığını ve sunucunuzunvendor-list.consensu.orgadresine giden HTTPS ile ulaşabildiğini doğrulayın.
Bölgesel tespite rağmen tüm ziyaretçiler yapılandırılmış profili alıyor
geo_enabledaçık mı? Varsayılan olarak kapalıdır.- Proxy'nizi bildirdiniz mi?
wp-config.phpiçindeOWC_BEHIND_CLOUDFLARE,OWC_BEHIND_CLOUDFRONTya daOWC_GEO_TRUSTED_HEADERSolmadan ülke başlıkları yok sayılır, çünkü taklit edilebilirler. - MaxMind dosyası yerinde mi? Eklenti onu indirmez ve bir yükleme ekranı sunmaz.
- Bu normal de olabilir: önbellekten sunulan bir ziyaretçinin ilk görüntülemesi, 24 saatlik çerez var olana kadar yapılandırılmış profili kullanır. Kontrol paneli; tespit edilen ülkeyi, uygulanan profili ve kaynağı içeren bir tanı bloğu gösterir.
Yönetim, kayıt defteri anahtarının veritabanında olduğunu bildiriyor
Bu notice_ledger_key uyarısıdır. AUTH_KEY ve AUTH_SALT değerlerinin wp-config.php
içinde olmadığı — bu durumda WordPress onları veritabanında saklar — ve OWC_LEDGER_KEY
değerinin de tanımlı olmadığı anlamına gelir. Zincir kurulmaya devam eder, ama veritabanına
erişebilen herkes onu yeniden imzalayabilir: kurcalamaya karşı kanıt iddiası artık
geçerli değildir.
Çare, wp-config.php içine OWC_LEDGER_KEY (ve hazır oradayken AUTH_KEY ile AUTH_SALT)
eklemektir. Doğrulama sonrasında bir anahtar rotasyonunu bir yeniden yazımdan ayırır,
dolayısıyla bu değişiklik geçmişinizi geçersiz kılmaz.
Eklenti hiçbir şey yapmıyor ve kırmızı bir uyarı var
WordPress sürümünüz 6.2'den eski. Eklenti başlatmayı reddeder ve uyarı, hiçbir şeyin engellenmediğini ve hiçbir rızanın kaydedilmediğini açıkça söyler. WordPress'i güncelleyin ya da bu arada eklentiyi kapatıp banner'ı sayfalarınızdan kaldırın.
Katalog kuralları “tetiklenemiyor”
Bir yönetim uyarısı bunları bildirir ve Tracker catalogue sekmesinin buna ayrılmış bir filtresi vardır. Dört olası neden: boş ya da yalnızca görünmez karakterlerden oluşan desen, derlenmeyen veya felaket düzeyinde geri izleme yapan düzenli ifade, bir URL'yi hedeflemek için fazla kısa ve noktasız desen, ya da sitede artık var olmayan bir kategori. Bu satırları düzeltin ya da silin: yanlış bir kapsam izlenimi veriyorlar.
SSS
Eklenti bir sayfa önbelleğinin arkasında çalışır mı? Evet, ve mimarisinin tamamı bu kısıt etrafında kurulmuştur. Üretilen HTML tüm ziyaretçiler için aynıdır; rıza tarayıcıda okunur ve ilk render'dan önce uygulanır. Önbelleklenebilir HTML'e hiçbir nonce basılmaz. Yalnızca gerçekten kişiye özel yanıtlar önbelleklenemez olarak işaretlenir.
Ücretli bir CMP'nin yerini tutar mı? Çoğu sitede aynı alanı kapsar: banner, engelleme, denetim günlüğü, hak talepleri, coğrafi yönlendirme ve üretilen belgeler. Yapmadığı iki şey: IAB Europe nezdinde kayıtlı bir CMP değildir ve hukuki danışmanlık ya da gözden geçirilmiş belgeler sağlamaz — üreteç, sizin onaylatmanız gereken taslaklar üretir.
Kayıt defteri kurcalamaya karşı kanıtlı mı?
Bir koşulla, kurcalandığında belli olur. Her satır, bir öncekinin özeti üzerinden HMAC ile
imzalanır: değiştirilen ya da silinen bir satır zinciri kırar ve doğrulama nerede olduğunu
söyler. Güvence, imza anahtarının veritabanının dışında yaşamasına dayanır. AUTH_KEY ve
AUTH_SALT wp-config.php içindeyse ya da OWC_LEDGER_KEY tanımlıysa durum böyledir. Aksi
halde WordPress salt'ları veritabanında saklar ve oraya erişen bir saldırgan zinciri yeniden
imzalayabilir — eklenti bu durumu tespit eder ve sizi uyarır.
Tarama aracı siteyi yavaşlatır mı? Hayır. Varsayılan olarak kapalıdır ve açıldıktan sonra, seçtiğiniz sıklıkta WP-Cron üzerinde çalışarak kendi sayfalarınızdan sunucu tarafında bir örneklem alır. Bir ziyaretçinin gezinmesi sırasında asla çalışmaz.
Tarama aracı çerezleri buluyor mu?
Kısmen, ve bunu anlamak önemli. Sunucu taraması sayfalarınızın Set-Cookie başlıklarını
okur: dolayısıyla HttpOnly olanlar dahil, sunucunun bıraktığı çerezleri bulur. Hiç
JavaScript çalıştırmadığı için tarayıcıda betiklerin yazdığı çerezler ona görünmez; onlar,
yalnızca oturum açmış bir yönetici için çalışan bir sonda tarafından toplanır. Sonucu
eksiksiz bir liste olarak değil, görülenlerin envanteri olarak ele alın — iki ekran da
tersini varsaymanıza izin vermek yerine bunu söyler.
Bir hak talebi nasıl yerine getirilir? Kişi formu gönderir ve bir doğrulama e-postası alır. Talebi bağlantıdaki sayfada onaylamak, 12.3 maddesinin süresini başlatır ve bir WordPress yerel talebi açar. DSAR ekranından, sitede kayıtlı tüm dışa aktarıcıların ürettiği bir JSON dışa aktarımını indirir, tüm silicileri çalıştırır ve talebe bağlı kalan yazılı bir yanıtla kapatırsınız. Dışa aktarmanın neyi kapsadığı, dolayısıyla kurulu eklentilere bağlıdır; bu kancaların hiçbirini kaydetmeyenler elle ele alınmalıdır.
TCF modülünü AdSense ya da Ad Manager için kullanabilir miyim? Yalnızca IAB Europe'un verdiği kendi CMP ID'nizle ve o durumda bile bir çekinceyle. CMP ID olmadan modül hiç yüklenmez. CMP ID varken doğru kodlanmış bir TC dizesi yayımlar ve panel, bu dizenin öne sürebileceği her amacı ve her özel özelliği gösterir — ama TCF politikası, kayıtlı bir CMP'den hem amaç düzeyinde hem de sağlayıcı düzeyinde seçim ister. Burada amaç anahtarları kategorileri izler ve sağlayıcı seçimi yoktur: bu, kayıtlı bir CMP değildir ve sağlayıcıların sinyalini reddetmesi meşrudur. TCF kapsamındaki reklam geliri siteniz için önemliyse sertifikalı bir CMP kullanın.
Belgeler hangi dilde üretiliyor? Gizlilik politikası ve çerez politikası on bir profilin tamamı için, yargı bölgesinin dilinde vardır: İngilizce; Fransa, Belçika, Lüksemburg ve Québec için Fransızca; Brezilya için Portekizce. Yasal bilgiler ile kullanım ve satış koşulları yalnızca Fransızca vardır; diğer her yargı bölgesi için üreteç, uygun olmayan bir belge yayımlamak yerine bunları üretmeyi reddeder.
Banner'da neleri değiştirebilirim?
Dört konum; açık, koyu ya da otomatik tema; isteğe bağlı bir logo; etiketler ve yeniden
açmak için bir yüzen düğme. owc-open-preferences sınıfını taşıyan her öğe paneli yeniden
açar. “Tümünü reddet”, “Tümünü kabul et” ile aynı belirginlikte render edilir. Kapatma
çarpısı varsayılan olarak kapalıdır; açıldığında sessiz bir kapatma değil, eksiksiz bir ret
kaydeder. Panel klavyeyle kullanılabilir, anahtarları görünür bir durum taşır ve modal odağı
tuzaklayıp sonra geri verir. Metinler çevrilebilir ve owc_banner_texts filtresiyle
değiştirilebilir.
Otomatik engelleme tam olarak neyi engelliyor?
Üçüncü taraf betikler, satır içi izleme kodları, iframe'ler, ölçüm pikselleri, analitik ve
pazarlama stil dosyaları ve üçüncü taraf medya kaynakları rızadan önce yeniden yazılır ve
sonra belge sırasına göre serbest bırakılır. Kataloğa girmiş bir üçüncü tarafa yönelik kaynak
ipuçları ertelenmez, silinir; çünkü bir ipucu bağlantı açar ve geri getirilecek hiçbir şeyi
yoktur. functional sınıfındaki bir ana bilgisayarın sunduğu stil dosyaları ve yazı tipleri
olduğu gibi bırakılır. Önbellek eklentilerinin tembel yükleme nitelikleri, bir yükleyici
engellenmiş bir URL'yi geri getirmesin diye etkisizleştirilir. Eklenti 175 imza sunar; bunlar
Tracker catalogue ekranından düzenlenebilir ve filtreyle genişletilebilir.
Kayıt defterine ne yazılıyor? Her rıza eylemi — kabul, ret, kısmi kayıt, GPC opt-out'u, yenileme, geri çekme — zincirlenmiş tabloya eklenir. Bir satır şunları içerir: takma adlaştırılmış bir IP, bir user-agent özeti, sayfa URL'si, uyumluluk profili, yürürlükteki belgelerin bir özeti, gerçekte gösterilen banner'ın bir özeti ve eklenti sürümü — yani ziyaretçinin ne gördüğünü yeniden kurmayı sağlayan öğeler.
Haklar formunda hangi korumalar var? Bir bot tuzağı, asgari bir doldurma süresi, sunucu tarafında doğrulanan zorunlu bir beyan, üç ayrı hız sınırı, yalnızca özet biçiminde saklanan tek kullanımlık bir token ve sayfada açık bir eylem gerektiren bir onay — böylece bir e-posta bağlantı tarayıcısı, kişinin yerine bir kimliği doğrulayamaz. Sahibinin kimliğini hiç doğrulamadığı bir talep ne dışa aktarılabilir, ne silinebilir, ne de yerine getirilmiş olarak kaydedilebilir; bu denetim yalnızca düğmeleri gizleyerek değil, sunucu tarafında uygulanır.
Hangi Google Consent Mode v2 sinyalleri yayımlanıyor?
Yedisi de: ad_storage, ad_user_data, ad_personalization, analytics_storage,
functionality_storage, personalization_storage ve security_storage. Altı kategori
bunlara tek bir doğruluk kaynağından eşlenir; böylece banner, engelleme ve bootstrap
birbirinden ayrışamaz.
CCPA opt-out'u ve GPC nasıl yönetiliyor? Alt bilgiye eklenen ya da kısa kodla yerleştirilen bir “Do Not Sell or Share” denetim öğesi vardır. İlk tıklama, Kaliforniya yönetmeliklerinin gerektirdiği gibi, bir panel açmak yerine opt-out'u kaydeder. Global Privacy Control sinyali, ABD profilleri altında tarama oturumu başına bir kez bağlayıcı bir opt-out olarak işlenir ve ziyaretçi, kaydettiği bir seçimin yerine geçilmişse uyarılır. GDPR ailesindeki profillerde GPC bir ipucu olarak işlenir: isteğe bağlı kategoriler arayüzde önceden reddedilmiş görünür, banner görünmeye devam eder ve hiçbir şey kaydedilmez — çünkü orada rıza olumlu bir eylem olmalıdır.
Eklenti kendisi hangi çerezleri bırakıyor?
Hepsi dahili çerezlerdir, hiçbiri izlemeye hizmet etmez ve üretilen çerez politikasında
bildirilirler: owc_consent (seçimler, tarayıcının takma adlı token'ı ve profil; süresi
yenileme ayarını izler, varsayılan 12 ay, 13 ile sınırlı), owc_geo (tespit edilen ülke ve
profil, 24 saat, hiçbir IP adresi olmadan), owc_gpc (oturum işaretçisi), owc_gpc_notice
(5 dakika) ve euconsent-v2 (TCF dizesi, yalnızca modül açıksa ve ziyaretçi bir eylemde
bulunduktan sonra).
Çoklu sitede çalışır mı? Evet. Ağdaki her sitenin kendi tabloları ve kendi ayarları vardır. Ağ genelinde etkinleştirme, yalnızca ağda en fazla 200 site varsa tüm siteleri dolaşır; üzerindeyse her site ilk isteğinde hazırlanır.
Peki eklentiyi silersem? Kayıt defteri, tarama bulguları, katalog, OW Forms bağlantıları, seçenekler ve ayarlar varsayılan olarak yerinde kalır. Ayarınız ne olursa olsun her zaman iki şey gider: altı zamanlanmış görev ve hak talepleri tablosu — üçüncü kişilere ait doğrudan kimlik belirtici kişisel veri içeren tek tablo odur ve eklenti gittikten sonra saklama süresini hiçbir şey sınırlamaz, hiçbir ekran da yanıt vermeye izin vermez. Taleplerinizi eklentiyi silmeden önce dışa aktarın. Geri kalanının tamamen temizlenmesi için, silmeden önce “Delete all data on uninstall” seçeneğini açın.
Destek nereden alınır?
- Destek portalı: https://optionweb.dev/tr/addons/support/
- E-posta: support@optionweb.dev
- Dokümantasyon: https://optionweb.dev/tr/addons/ow-consent/