Malum php yazilimlarimizi bir türlü koruyamiyoruz (zend, ioncube ve buna benzer sistemler) bu nedenle önemli olan functionlari bir sunucuda bulundurup ordan her gerekdiginde cagirmak/kullanmak istiyorum.
Hazirladigim yazilim herkesin kendi sunucusuna kurulacak ve benim sunucuda önemli functionlar bulunacak ve bunlar sadece gerekdiginde benim sunucudan kullanmasini istiyorum. Yani yazilim indirlmeyecek sadece uzaktaki function lokal'de ki sunucuda calisdirilmasini istiyorum.
Bu islemi en iyi sekilde nasil yapabilirim?
Sunuculara özel eklenti veya php config'de ayar yapma ihtimalimiz var o yandan herhangi bir sorun olmaz
Simdiden tesekkürler
Mantığını anlatmak için ufak bir class yazdım.
Hmac en güçlü şifreleme türlerinden biridir.
256 bits key ile şifreleme yapılır.
Ve key bilinmeden kırılması imkansızdır.
Uzak sunucudan php dosyalarını çekerken hmac ile şifreler, clienttede şifreyi çözersek güzel bir algoritma yapmış oluruz.
Ancak kötü niyetli kişiler yinede phpnin el verdiği kadar araya gireceklerdir. Ve kırmaya çalışacaklardır, bunun önlemek içinse keyin içine istek gelen (scriptin kurulu oldugu ip adresini) gömerseniz ve o ipyi kontrol ederseniz o ipden başka kimse işlem yapamaz.
10 dkda yazdım, belki vaktim olursa devam eder daha profesyonel şekilde paylaşabilirim.
Ayrıca performans kaybı diyen arkadaşlar 2 kb dosyayı çekmenin neresi kayip, bilmiyorsanız lütfen susun. insanlar burada bilgi istiyor. boş laf değil.
kolay gelsin.
<?php
class r10_lisans_server
{
Private $ROOT_PATH;
Private $LICENSE_KEY;
public function __construct($fonksiyon)
{
header("Content-Type: text/html; charset=utf-8");
$this->ROOT_PATH = dirname(__FILE__);
$this->LICENSE_KEY = "Nv15NrhFb98H4pVeGiv9ENB8o2aFQ0Zu";
switch ($fonksiyon) {
case "ilk_function":
$this->ilk_function();
break;
}
}
public function encrypt($code)
{
$key = substr(hash('sha256', $this->LICENSE_KEY . $this->LICENSE_KEY), 0, 32);
$algorithm = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$ivSize = mcrypt_get_iv_size($algorithm, $mode);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
$ciphertext = $iv . mcrypt_encrypt($algorithm, $this->LICENSE_KEY, $code, $mode, $iv);
$hmac = hash_hmac('sha256', $ciphertext, $this->LICENSE_KEY);
return $hmac . $ciphertext;
}
public function ilk_function()
{
$code = "";
$code .= "[BASLA]\n";
$code .= "function ilk_function() { echo 'selam'; }";
$code .= "[BITIR]\n";
echo $this->encrypt($code);
}
}
class r10_lisans_client
{
public function __construct($LICENSE_KEY)
{
header("Content-Type: text/html; charset=utf-8");
$this->LICENSE_KEY = $LICENSE_KEY;
}
public function decrypt($cipher)
{
$key = substr(hash('sha256', $this->LICENSE_KEY . $this->LICENSE_KEY), 0, 32);
$macSize = 64;
$hmac = substr($cipher, 0, $macSize);
$cipher = substr($cipher, $macSize);
$compareHmac = hash_hmac('sha256', $cipher, $this->LICENSE_KEY);
if ($hmac !== $compareHmac) {
return FALSE;
}
$algorithm = MCRYPT_RIJNDAEL_128;
$mode = MCRYPT_MODE_CBC;
$ivSize = mcrypt_get_iv_size($algorithm, $mode);
$iv = substr($cipher, 0, $ivSize);
$cipher = substr($cipher, $ivSize);
$plain = mcrypt_decrypt($algorithm, $this->LICENSE_KEY, $cipher, $mode, $iv);
return rtrim($plain, "\0");
}
public function ilk_function()
{
$code = php_duzelt(file_get_contents("https://site.com/fonksiyonlar.php?fonksiyon=ilk_function"));
echo $this->decrypt($code);
}
public function php_duzelt($code)
{
return str_replace(array("[BASLA]", "[BITIR]"), array("<?php", "?>"), $code);
}
}
$server = new r10_lisans_server($_GET["fonksiyon"]);
$client = new r10_lisans_client("LISANS ANAHTARI");