Tema Koruma

1.7k görüntülenme Markdown

Temanın modül sınıfı yoktur ve şablonları şifrelenemez. Neyin korunabildiği, lisans kontrolünün nereye konduğu ve bir şablonun dürüstçe neyi zorlayabildiği.

Genel Bakış

Yalnız PHP şifrelenebilir. Temada bunlar hooks.php, theme.php ve yalnızca tema engine: 'php' bildirdiğinde view dosyalarının kendisidir.

Şablona sır ve karar konmaz

Şablon yalnız gösterir. Karşılaştırdığı değer ve kararı veren kod şifreli PHP dosyasında yaşar.

Ön Koşullar

Kendi lisans sunucunuz Sorunun nereye gideceği ve cevabın ne anlama geldiği size ait: Pazar Yeri Ürününü Lisanslama.
Temada bir hooks.php Sıradan temada isteğe bağlı, lisanslı temada zorunlu. İlk sayfa gösterilmeden önce çalışan tek dosya odur.
Varlıkların açık gittiğini kabul etmek CSS, JavaScript ve görseller olduğu gibi gider. Kopyalanabilirler; yalnız onlarla çalışan bir tema kurulamaz.

Yapı

Üç katman var ve ilk ikisi aynı dosyadır.

KatmanNeredeNe yapar
Kontrolhooks.php, şifreliSunucunuza sorar. İlk sayfa gösterilmeden önce bir kez çalışır, böylece lisanssız kopya en başta yargılanır
Yayımhooks.php, şifreliCevap "evet" ise şablon verisine bir mühür koyar, değilse hiçbir şey koymaz
Zorlamakorunan her şablonKendi taşıdığı sabit mühürle karşılaştırır. Paketleyici burada hiçbir şey şifrelemez, karşılaştırmanın kendisi tek dayanaktır

Dosya yalnız varsa yüklenir. Silinmiş bir hooks.php hiç mühür yayımlamaz ve korunan her şablon kapalı tarafa düşer.

Adım Adım

Kontrolü hooks.php içine koyun

  1. Sunucunuza hooks.php içinden sorun. Burası, ilk sayfa gösterilmeden önce bir kez çalışan tek yerdir.
  2. Cevabı saklayın. Tema her sayfada devrededir, cache'siz bir kontrol sayfa başına bir istek demektir.
  3. Kararı orada, şifreli dosyada verin. Şablonlara ulaşan şey bir değerdir, gerekçe değil.

Mührü tek kancadan yayımlayın

  1. Tema için tek bir filter:template.variables kancası kaydedin ve temanın ihtiyaç duyduğu her şeyi onun içinde toplayın.
  2. Lisans "evet" dediğinde mührü döndürdüğü diziye ekleyin, demediğinde hiç eklemeyin.
  3. İkinci bir kanca kaydetmeyin. Yalnız son dönen dizi yaşar, ikinci kayıt birincinin verisini sessizce düşürür.

Bayrağı değil değeri karşılaştırın

  1. Şablonun taşıdığı sabit dizeyle karşılaştırın. Boolean burada işe yaramaz: isteyen kendi kancasını kaydedip "true" yayımlayabilir.
  2. Karşılaştırmayı lisanssız çalışmaması gereken her şablona koyun, tek bir ortak sarmalayıcıya değil. Tek kontrol, bulunup silinecek tek dosya demektir.
  3. Lisanslı yolun sayfanın ihtiyaç duyduğu bir şeyi üretmesini sağlayın. Böylece kontrolü sökmek uyarıyı gizlemek yerine tasarımı bozar.

Tam koruma PHP tema demektir

  1. Künyede engine: 'php' bildirin. View dosyaları PHP olur ve geri kalanla birlikte şifrelenir.
  2. Karşılığında sandbox'tan vazgeçer, kaçış sorumluluğunu üstlenirsiniz. Motor seçimi bu takası açıkça söyler.
  3. Varlıklar iki durumda da açık kalır.

Referans

hooks.phpŞifrelenebilir. Kontrol, cache ve yayım burada yaşar.
theme.phpŞifrelenebilir. Künye: motor, meta ve ayar şeması.
view, engine phpŞifrelenebilir, çünkü PHP dosyalarıdır.
view, tpl ya da twigŞifrelenemez. Herhangi bir kontrol çalışmadan önce diske düz PHP olarak derlenir.
varlıklarŞifrelenemez. CSS, JavaScript, font ve görseller olduğu gibi gider.

Örnek

hooks.php, tek kanca, şifreli
\Hook::add('filter:template.variables', 1, function ($template, $data) {
    $answer = \License::remote_check('https://vendor.example/api/licence', [
        'product' => 'aurora-theme',
        'domain'  => \Utility::getDomain(),
    ]);

    $body = \Utility::jdecode((string) ($answer['body'] ?? ''), true);
    $ok   = $answer === null || ($body['data']['valid'] ?? false) === true;

    // Mühür yalnız "evet" cevabında eklenir. Temanın yayımladığı diğer her şey de aynı
    // dizidedir: ikinci bir kanca hepsini birden düşürür.
    if ($ok) $data['aurora_seal'] = 'a7f3c1d90e5b';

    return $data;
});
korunan bir şablon
{if $aurora_seal|default:'' !== 'a7f3c1d90e5b'}
    {include file='partials/unlicensed.tpl'}
{else}
    {* bölümün kendisi *}
{/if}

Tuzaklar

Mühür bir sır değildir

Lisanslı kopyası olan biri, lisanslı yolun ne yayımladığını izleyebilir. Bu, ömrü bir sürüm kadar olan bir anahtardır. Her sürümde yenisini yazın ki eski paketten alınan değer ilk güncellemede ölsün.

Tema başına tek kanca

Yalnız son dönen dizi yaşar. İkinci bir kayıt mührü, menüleri ve birincinin yayımladığı her şeyi düşürür.

Ağırlık iki gerçek savunmada olmalı

Lisanslı yol sayfanın ihtiyaç duyduğu bir şeyi taşısın ve kurulumları bildirin ki kopyaların nerede çalıştığını görebilesiniz. Temanın gerçek koruması şifreleme değil, lisanstır.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.