PHP Script Lisanslama Örneği

Bazı yerlerde bu örnekleri $_SERVER değişkenine göre yaptıklarını gördüğüm için içime daha çok sinen haliyle bir örnek yapmak istedim. İçime sinmeme sebebi kolay müdahele edilebilir olmasıdır. Siz kodları ne kadar kilitlerseniz kilitleyin
$_SERVER[' SERVER_NAME']=$_SERVER['HTTP_HOST']='www.cnylmz.net';
gibi bir satır kullanıldığında, lisans sisteminiz işlevini tamamen kaybeder. İçime sinmesi için, bu müdaheleyi olabildiğince zorlaştırmak gerekiyor.


Müdaheleyi zorlaştırmak içinse, değişken yerine fonksiyon kullanma taraftarıyım. getenv() fonksiyonu, aynı $_SERVER değişkeni gibi ön tanımlı ortam değişkenlerine ulaşmak için kullanılır, güzel yanı ise putenv() fonksiyonunun safe_mod(güvenli biçim) seçeneğinde çalışan sunucularda çalışmaması. O yüzden bi kaç kontrol ile kolay lisans betiğini hazırlayabiliriz.

PHP kodu
  1. if(ini_get('safe_mode')==true)
  2. die('Güvenliğiniz için sunucu "SAFE MODE(Güvenli biçim)" durumunda çalıştırılmalıdır');
  3.  
  4. require('lisans.php');// içinde $lisans_anahtar değişkeni var
  5. $lisans['site']=getenv('HTTP_HOST');
  6. if (substr($lisans['site'], 0, 4) == "www.")
  7. $lisans['site']=substr($lisans['site'],4);
  8. $lisans['hash']=wordwrap(strtoupper(md5($lisans['site'])),4,'-',true);
  9. if($lisans['hash']!==$lisans_anahtar)
  10. die('Lisans anahtarınız bu site için geçerli değil');
  11. else
  12. unset($lisans);
  13. /*
  14. burası da sizin php kodlarınız
  15. */
  16. ?>

ve bu kodları da ioncube, zend veya benzeri programlarla encode ettikten sonra işiniz bitmiş demektir.

Sonraki Sayfa: Lisans bilgileri farklı sunucuda nasıl kontrol edilir ?

1 2 3


Okunma: 1173 , Oy Sayısı: 23 , Puan: 7.30

Etiketler

php script lisans , php lisans , php lisanslama , script lisanslama , php script lisanslama ,

burak kurum02 Şubat 2010 Salı 09:52:03


güzel metin
||


Selim Çakal23 Mart 2010 Salı 19:00:20


Hocam iyide lisans php ye ne koyacaz ya da ne yazacaz
||


Gündüz Can YILMAZ23 Mart 2010 Salı 19:23:33


Mesela cnylmz.net adresi için lisans kodu üretecekseniz, herhangi bir dosyada
PHP kodu
  1. echo wordwrap(strtoupper(md5('cnylmz.net')),4,'-',true);

yazıp lisans kodunu görebilrisiniz. Bu kod da
BE64-F977-1336-F1DF-7273-299C-8EE1-D8C9
oluyor. artık siz lisans.php dosyası içine
PHP kodu
  1. <?php
  2. $lisans_anahtar='BE64-F977-1336-F1DF-7273-299C-8EE1-D8C9';
  3. ?>

yazarak kodların yalnızca o sitede çalışmasını sağlayabilrisiniz.

||


mustafa21 Nisan 2010 Çarşamba 23:58:26


hocam çok güzel hazırlamışsınız. ancak bu localhost da çalışıyor. yani scripti localhost da entegre edip lisans anahtarını localhost için alınca çalışıyor. ama hosta atıp domain.com için lisans kodu alınca çalışmıyor. çok uğraştım ama çözemedim bunu nasıl halledicez
||


Gündüz Can YILMAZ22 Nisan 2010 Perşembe 15:03:14


if (substr($site, 0, 4) == "www.")
olan satırda problem varmış
if (substr($lisans['site'], 0, 4) == "www.")
şekline getirdim. Üstteki kodlarda da düzeltme yaptım. Siz de kodunuzdaki o satırı değiştirirseniz sorun kalmayacaktır. İlginiz için teşekkür ederim

||


mustafa22 Nisan 2010 Perşembe 18:15:25


ilginize çok teşekkür ederim. evet şimdi çalıştı ancak yine bir sorunla karşılaştım. lisansı domain.com için alınca sadece domain.com diye girince açılıyor. www.domain.com diye girince lisans geçersiz diyor açılmıyor. böyle bir sorun var. uğraştım ama çözemedim.
||


Gündüz Can YILMAZ22 Nisan 2010 Perşembe 20:56:55


Kodları düzgünleştirmek adına değişkenleri değiştirirken hata yapmışım. Bir önceki hatanın aynısı hemen alt satırında tekrarlamış.
$lisans['site']=substr($site,4);
satırı yerine
$lisans['site']=substr($lisans['site'],4);
yazdığınızda düzelecektir.
||


Hasan Can ÖZKAN02 Haziran 2010 Çarşamba 21:25:52


Peki lisans.php'yi çağırmak yerine başka bir sunucudan nasıl çekebilirim? Mesela izin verdiğim siteleri ben www.site.com/siteler.txt veya siteler.php gibi uzak sunucudan çekmek istiyorum?
||


Gündüz Can YILMAZ02 Haziran 2010 Çarşamba 22:13:10


O şekilde iken lisans anahtarı uygulaması olmaz çünkü tüm anahtarlar bir şekilde görüntülenebilri ancak yina aynı ayarları yapıp doğrulama fonksiyonunu

if($lisans['hash']!==$lisans_anahtar)
die('Lisans anahtarınız bu site için geçerli değil');

satırları yerine

$lisans_cevap=file_get_contents('http://www.cnylmz.net/lisans.php?site='.$lisans['site'].'&anahtar='.$lisans['hash']);
if($lisans_cevap!='ONAYLANDI')
die('HATALI ANAHTAR');

yazarak sunucu kontrollü hale getirebilrisiniz. file_get_contents yerine farklı fonksiyonlar da kullanabilrisiniz. hatta tavsiyem fsockopen, curl ve peşinden file veya fil_get_contents tir
||


Hasan Can ÖZKAN05 Haziran 2010 Cumartesi 12:10:21


Herşey iyi güzel de scripti kasmasa :)
||


Gündüz Can YILMAZ05 Haziran 2010 Cumartesi 13:09:10


Uzaktan okuma işlemi mecburen yavaşlamaya sebep olur. Tampon kullanın desem, sunucuya kaydettikten sonra lisansı başka sunucuda aramanın anlamı kalmaz. Bu durumda ancak betğinizin az kullanılan, yönetim paneli gibi yerlerinde bu korumayı aktifleştireilirsiniz. Yine de tavsiye etmediğim bir yöntem.
||


salih14 Haziran 2010 Pazartesi 08:51:54


hocam ben yeniyim bu konuda lisans kodu üretme konusunu anlamadım..
echo wordwrap(strtoupper(md5('benimsitem.net')),4,'-',true);

yazdım herhangi bir dosyada lisans kodunu nasıl görecem? bunu başaramadım..
BE64-F977-1336-F1DF-7273-299C-8EE1-D8C9 cnylmaz.net için buysa başka yazdığım domain için nasıl görürüm anahtarı?

||


Gündüz Can YILMAZ14 Haziran 2010 Pazartesi 16:22:06


Salih bey goster.php adında bir dosya içerisine
<?php echo wordwrap(strtoupper(md5('benimsitem.net')),4,'-',true); ?>
yazıp, http://adres/goster.php şeklinde bu dosyayı çağırırsnaız, karşınıza direk olaran benimsitem.net e ait lisans anahtarını okursunuz.
||


Hasan Can ÖZKAN16 Haziran 2010 Çarşamba 11:55:39


Uzak sunucudan çekeceğim lisans.php dosyası nasıl olmalı ? Onu ayarlayamadım ? Aşağıdaki satırlar için geçerli olan lisans.php dosyası.

$lisans_cevap=file_get_contents('http://www.cnylmz.net/lisans.php?site='.$lisans['site'].'&anahtar='.$lisans['hash']);
if($lisans_cevap!='ONAYLANDI')
die('HATALI ANAHTAR');

||


Gündüz Can YILMAZ16 Haziran 2010 Çarşamba 21:18:31


PHP kodu
  1. <?php//uzaktaki lisans.php dosyası
  2. if(wordwrap(strtoupper(md5($_GET['site'])),4,'-',true)==$_GET['anahtar'])
  3. echo 'ONAYLANDI';
  4. else
  5. echo 'HATALI ANAHTAR';
  6. ?>


Hatta dosyanın başına
if(gethostbyname($_GET['site'])!=$_SERVER['REMOTE_ADDR'])
die('Bu site sizin değil!!!');

şeklinde uyarı da verdirebilrisin. Tabi IPv6 da sıkıntı olabilir, o yüzden eklemeni pek tavsiye etmiyorum
||


Hasan Can ÖZKAN16 Haziran 2010 Çarşamba 21:53:14


Ben hala daha anlamadım? bakın lisans.php dosyası oluşturdum bu dosyanın içinde izin verdiğim lisans anahtarı olacak bu nasıl olacak onu demek istiyorum ? bana örnek bir lisans.php dosyası gösterirmisiniz?
||


Gündüz Can YILMAZ16 Haziran 2010 Çarşamba 22:13:23


Bu yazdığım zaten örnek bir lisans.php dosyası idi, bu sizin sunucunuzda duracak. Bu da kullanıcının sitesinde olacak dosya şekli
PHP kodu
  1. <?php
  2. if(ini_get('safe_mode')==true)
  3. die('Güvenliğiniz için sunucu "SAFE MODE(Güvenli biçim)" durumunda çalıştırılmalıdır');
  4. require('lisans.php');// içinde $lisans_anahtar değişkeni var
  5. $lisans['site']=getenv('HTTP_HOST');
  6. if (substr($lisans['site'], 0, 4) == "www.")
  7. $lisans['site']=substr($lisans['site'],4);
  8. $lisans_cevap=file_get_contents('http://www.cnylmz.net/lisans.php?site='.$lisans['site'].'&anahtar='.$lisans_anahtar);
  9. if($lisans_cevap!='ONAYLANDI')
  10. die('Lisans anahtarınız bu site için geçerli değil');
  11. else
  12. unset($lisans);
  13. /*
  14. burası da sizin php kodlarınız
  15. */
  16. ?>

||


Hasan Can ÖZKAN21 Haziran 2010 Pazartesi 11:55:20


Çok özür diliyorum, çok fazla oldum biliyorum affınıza sığınarak soruyorum. LOCALHOST site adresine lisanslanmış uzaktaki lisans.php örneğini yazarmısınız buraya lütfen :(
||


Gündüz Can YILMAZ22 Haziran 2010 Salı 02:16:57


Aman efendim olur mu öyle şey.
http://www.cnylmz.net/dosyalar/lisans.rar adresine çalışır halde 3 dosya ekledim. Yalnız buradaki örneklerin dışında sunucu dosyasını sunucu.php olarak ayarladım. lisans.php de bulunan anahtarı değiştirip sağlıklı olup olmadığını kontrol edebilirsiniz.
||


Hasan Can ÖZKAN23 Haziran 2010 Çarşamba 16:46:13


Öncelikle çok çok teşekkür ederim, ilginiz için ayrıca teşekkür ederim. Bir maruzatım daha olacak. $lisans_anahtar değişkenini başka bir sunucu üzerinden çekme ihtimalimiz varmı ? (Örneğin: Script 1 aylık satın alındı diyelim 1 ayın sonunda ben lisans anahtarını silecem uzaktan script calısmayacak ?) Mümkünmüdür böyle birşey? Saygılar.
||


Gündüz Can YILMAZ23 Haziran 2010 Çarşamba 21:34:55


Böyle birşey için, lisans anahatarı tamamen gereksiz. Yani şöyle ki, son örnekte ki
$lisans_cevap=file_get_contents('http://www.cnylmz.net/lisans.php?site='.$lisans['site'].'&anahtar='.$lisans_anahtar);
satırını
$lisans_cevap=file_get_contents('http://www.cnylmz.net/lisans.php?site='.$lisans['site']);
olarak değiştirin. Ardından, sizin sunucunuzda bulunacak olan kontrol dosyasını da veritabanı ile çalışacak hale getirin,
PHP kodu
  1. $sorgu=mysql_query("SELECT bitis FROM lisans WHERE site='".mysql_real_escape_string(urldecode($_GET['site']))."'");
  2. $sonuc_dizi=mysql_fetch_assoc($sorgu);
  3. if($sonuc_dizi==0 || $sonuc_dizi<time())
  4. echo 'YASAK SITE';
  5. else
  6. echo 'ONAYLANDI';

şeklinde değiştirip daha rahat kullanabilrisiniz. tabi veritabanı yerine dosya vs. kullanmak da tercihinize kalır
||


Turgay Aksu24 Haziran 2010 Perşembe 17:39:30


Çok değerli bir bilgi, paylaştığınız için teşekkürler. Bir ekleme yapmamız mümkün mü? Lisans kontrolünü bir kez yaptıktan sonra bir daha yapmasın script. Yardımcı olabilirseniz sevinirim.
Selamlar.
||


Gündüz Can YILMAZ24 Haziran 2010 Perşembe 22:16:40


Turgay bey istekler doğrultusunda yorumlarda bulunan bilgileri de hesaba katarak 2 sayfa daha ekledim yazıya. Yazının 3. sayfası yani
http://www.cnylmz.net/php/php-script-lisanslama-ornegi-16/3.html
sayfası, sizin isteğinize oldukça uygun. Yerel dosyada yapacağı kontrol sistemi etkilemeyeceğinden bu halde sorun yaşamazsınız. Eğer günlük değil, yalnızca bir kere kontrolünü istiyorsanız ilk örnek tam size göre.
||


Turgay Aksu28 Haziran 2010 Pazartesi 13:22:35


Elinize, emeğinize sağlık...
Selamlar.
||


Metin GÜZEK18 Ağustos 2010 Çarşamba 11:09:40


merhaba.
lisans.php
include.php
++
kontrol.php
şeklinde bir rar hazırlıyabilirmisiniz. 3. sayfadaki örneğe göre. bi türlü beceremedim.

Parse error: syntax error, unexpected ';' in /home/xxxx/public_html/test/test.php on line 6

şeklinde hata alıyorum.
lisans.php ye 777 verdim. fakat kodu yazamıyor sanırsam.
||


Samet Arabacıoğlu19 Ağustos 2010 Perşembe 23:15:08


Ben çalıştırdım ancak bir türlü lisans anahtarını okumuyor.Her şekilde lisans anahtarınız yanlış demekte.
||


Gündüz Can YILMAZ20 Ağustos 2010 Cuma 00:59:08


Metin Bey wordwrap yazan satırda bir parantezi kapatmayı unutmuşum. o satırı değiştirdimbaşka da bir sorun yokmuş. Kodları kopyalarken ?> işaretinden sorna kendisi bir boşluk koyuyor, o boşluk da ONAYLANDI dan sonra geldiği için farklı algılıyor. if($lisans_cevap!='ONAYLANDI') yerine if(strpos($lisans_cevap,'ONAYLANDI')===false) olarak değiştirebilirsiniz veya kontrol.php nin sonundan bir boşluk silin(Samet bey tahminimce sizin probleminiz buydu)

Çalışan 3. sayfa örneğini http://www.cnylmz.net/dosyalar/lisans.rar adresinden indirebilirsiniz
||




Yorumunuz