Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie skryptu - dyskusja
Forum PHP.pl > Forum > PHP
Fifi209
Zastanawia mnie od pewnego czasu jakie zabezpieczenia ma np. forum vBulletin kiedyś mieli opcje wykupienia licencji na np. rok i tutaj pytanie jak po roku zablokować dostęp użytkownikowi i przypomnieć mu, że musi zakupić nową (o ile dalej chce korzystać) ?

Myślałem nad rozwiązaniem i wpadło mi coś takiego do głowy:

Klient kupuje licencje ode mnie na powiedzmy rok, po zakupie trzeba go zarejestrować on podaje nazwę użytkownika, hasło i adres e-mail a ja mu po rejestracji podaję webkey.

W skrypcie, który On dostanie powiedzmy jest coś takiego:
[PHP] index.php - pobierz, plaintext
  1. <?php
  2. // to u użytkownika
  3.  
  4. $user = 'fifi209';
  5. $password = 'haselko';
  6. $webkey = '4e80787acff8c3136e69e4a36ae3dd0s';
  7.  
  8. $handle = fopen('http://domena/'.urlencode(strtolower($user)).'/'.urlencode(md5($password)).'/'.urlencode($webkey).'/', 'r');
  9. $status = fgets($handle, 2);
  10.  
  11. if ($status == 0) {
  12. exit();
  13. }
  14.  
  15. echo 'Ok';
  16.  
  17. fclose($handle);
  18.  
  19.  
  20. ?>
[PHP] index.php - pobierz, plaintext


.htaccess
Kod
RewriteEngine On
RewriteRule ^([a-z0-9]+)/([a-z0-9]+)/([a-zA-Z0-9]+)/$ access.php?user=$1&pass=$2&webkey=$3 [L]


[PHP] access.php - pobierz, plaintext
  1. // to u mnie na serwie
  2. <?php
  3.  
  4. $mysql = mysql_connect('localhost', 'fifi', 'haha.gif');
  5. mysql_select_db('testy', $mysql);
  6.  
  7. $sql = 'SELECT `time` FROM `users` WHERE `name` = "'.$_GET['user'].'" AND `password` = "'.$_GET['pass'].'" AND `webkey` = "'.$_GET['webkey'].'" LIMIT 1';
  8.  
  9. $select = mysql_fetch_assoc(mysql_query($sql));
  10.  
  11. if ($select['time'] > time()) {
  12. echo 1;
  13. }else{
  14. echo 0;
  15. }
  16.  
  17.  
  18. ?>
[PHP] access.php - pobierz, plaintext


I baza:
  1. CREATE TABLE `users` (
  2. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `name` varchar(40) collate utf8_polish_ci NOT NULL,
  4. `password` varchar(45) collate utf8_polish_ci NOT NULL,
  5. `mail` varchar(55) collate utf8_polish_ci NOT NULL,
  6. `webkey` varchar(45) collate utf8_polish_ci NOT NULL,
  7. `time` int(10) UNSIGNED NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=0 ;


Hmm, część która sprawdza status byłaby oczywiście jakoś zakodowana.
marcio
Ja wymyslilem kiedys cos innego fakt nie zaimplementowalem ale kolega korzysta i dziala.
W instalatorze kodu lub ogolnie przy pierwszym wywolaniu kodu wysylasz do twojej glownej aplikacji adres www strony ktora go uruchomila a w twojej bazie oczywiscie masz podstawowe dane klienta i za pomoca takiego zapytania:
  1. SELECT www,expire FROM clients WHERE www = "www.jakas-strona.pl" LIMIT 1

Po czym w bazie mamy adres strony klienta i date jej pierwszego uruchomienia bez dev'a.
Daje nam to 2 mozliwosci.
1.Sprawdzanie za ile licencja sie konczy jesli ty nie dajesz ja na stale tylko na np: 1 rok
2.Czy dany klient nie sprzedal np twojego oprogramowania/licencji komus innemu widac to po stronie www jeden klient = strona www a nie klient = n stron www.
Cos takiego kiedys wymyslilem, dokladnie teraz nie pomietam bo nigdzie tego nie rozpisalem ale teraz mniej wiecej bym to tak zrobil, tym bardziej ze jak nie zakodujesz kodu tym cube czy jak mu tam bylo to taki klient latwo moze sie skapowac ze $user,$password,$webkey sluza do kontroli a jak np napisz klase ktora co 1 miesiac albo 1 tydzien bedzie sprawdzala waznosci itp nikt sie nie skapnie bo przewaznie klient = laik.
Puciek
Nie zabezpieczaj.

Ktos kto chce zlamac, zrobi to. Zamiast tego zaoferuj dosc bonusowych featerow zeby oplacalo sie miec wersje legalna.
bełdzio
Cytat(fifi209 @ 23.02.2010, 13:23:25 ) *
W skrypcie, który On dostanie powiedzmy jest coś takiego:


czyli usuwamy ten kawałek kodu i już mamy wersję bez limitu czasowego. ionCube z tego co kojarzę pozwala określić licencję czasową
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.