Neden native eklenti? ionCube yaklaşımıyla dürüst bir karşılaştırma
PHP seviyesinde çözücü niye yetmiyor, ionCube neyi iyi yapıyor ve biz neden kendi C eklentimizi yazdık? Avantajlarıyla ve bedelleriyle anlatıyoruz.
OnionZero'nun kalbinde şifrelenmiş PHP dosyalarını derleme anında çözen ozguard adında native bir PHP eklentisi var. "Neden zahmet ettiniz, başka yol yok muydu?" sorusuna bu yazının konusu bu: rakip yaklaşımların neyi iyi yaptığını ve bizim hangi takaslara evet dediğimizi dürüstçe anlatalım.
Seçenek 1 — Saf PHP obfuscation
Değişken ve fonksiyon isimlerini karıştıran, kodu eval katmanlarına saran araçlar ucuzdur ve eklenti kurulumu gerektirmez. Ancak şifre çözme mantığının kendisi PHP olduğu için anahtar da çözücü de müşterinin erişebileceği PHP kodunun içindedir. Deneyimli bir geliştirici için bu bir hız tümseğidir; duvar değil.
Seçenek 2 — ionCube (ve benzeri ticari encoder'lar)
Hakkını verelim: ionCube, zend_compile_file tekniğinin 20 yılı aşkın süredir en dayanıklı ticari uygulamasıdır; loader'ı müşteri tarafında ücretsizdir ve geniş PHP sürüm desteği vardır. Biz de projeye başlarken ionCube'ü ciddiyetle değerlendirdik ve hibrit bir akışı destekleyecek şekilde dokümante ettik.
Bizi kendi eklentimizi yazmaya iten üç neden oldu:
- Cihaza bağlı anahtar türetme: Dosyaların yalnızca belirli bir makinede açılmasını istiyorduk; anahtar türetimini makine parmak izine bağlamak için derleme katmanına tam hâkim olmamız gerekiyordu.
- Offline-first tasarım: Hedef kitlemiz internete kapalı ağlarda çalışan ürünler. Lisans imza doğrulaması, dosya çözme ve güncelleme uygulamasının hepsinin ağ bağımsız, tek çatı altında durması gerekiyordu.
- Fiyat ve kontrol: Encoder lisans bedeli ve hesap başına ücretlendirme, küçük ekipler için pazarlık payını daraltıyor. Kendi yığınımızla müşterimize tek teklif, tek panel sunabiliyoruz.
Native eklentinin bedeli de var
Dürüstlük bu yazının konusu: ozguard müşteri sunucusunda php.ini erişimi gerektirir. Eklenti kurulumu kapalı paylaşımlı barındırmada mümkün değildir; VPS, özel (dedicated) sunucu veya konteyner hedeflenir. Her PHP sürümü ve platformu için ayrı derleme gerekir — bugün Windows (PHP 8.3, NTS x64) ve Linux derlemeleri mevcut. Bu eforu, karşılığında anahtarın ve çözücünün PHP seviyesinin tamamen dışına taşınması için kabul ediyoruz.
%100 kırılmazlık iddiası yok
Yerel makinede çalışan her satıcıdan gizli içerik, yeterli zaman ve erişim karşısında teorik olarak çözülebilir; bu ionCube için de bizim için de geçerli. Amacımız imkânsızlık değil, maliyeti kopyalamanın değerinin üstüne çıkarmak: rastgele dosya anahtarları, bellek-içi çözme, cihaz bağı ve tamper algılaması birlikte hedefi "kaynağı okumak yerine ürünü satın almak daha ucuz" noktasına taşır.
Native eklenti bir kapris değil; kontrol yüzeyini PHP'nin içinden motorun içine taşıyan mimari bir karardır.