Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie i sprawdzanie kluczy licencyjnych
Fibolg
post
Post #1





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Chełmno

Ostrzeżenie: (0%)
-----


Macie jakiś pomysł w jaki sposób zabezpieczyć licencyjność aplikacji napisanych w php? Nie znam się za bardzo na wyrażeniach regularnych więc to raczej odpada (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Chodzi o generację klucza licencyjnego oraz późniejsze sprawdzenie, czy jest prawidłowy...
Pozdrowienia
Go to the top of the page
+Quote Post
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Metody na zabezpieczenie aplikacji poza zastosowaniem doatkowego oprogramowania na serwerze nie ma.
Go to the top of the page
+Quote Post
tiraeth
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


1. Generujesz APPLICATION-KEY w php
2. Zapisujesz go do bazy
3. Podczas instalacji skryptu trzeba podać klucz
4. Łączy się z Twoją www i sprawdza czy klucz był już rejestrowany (istnieje w bazie ale bez pola installed=1)
5. Jeżeli installed=0 to zmieniamy jego wartość na 1 i pozwalamy na instalację a jeżeli nie to kończy się instalacja (usuwają się wszystkie pliki z serwera prócz index.php/install.php

Generowanie:
  1. <?php
  2. # generowanie klucza
  3. $key = md5(uniqid(rand(), true));
  4.  
  5. $one = substr($key, 0, 5);
  6. $two = substr($key, 5, 5);
  7. $three = substr($key, 10, 5);
  8. $four = substr($key, 15, 5);
  9.  
  10. $key = $one.'-'.$two.'-'.$three.'-'.$four;
  11. $key = strtoupper($key);
  12.  
  13. echo 'Nowy klucz: <b>'.$key.'</b>';
  14. ?>
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


A jak zmusisz usera zeby nie wycial ze skryptu kodu sprawdzajacego KEYa?

Problem byl juz omawiany: nie da sie zabezpieczyc.
Go to the top of the page
+Quote Post
Fibolg
post
Post #5





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Chełmno

Ostrzeżenie: (0%)
-----


Dzięki @Tiraeth mniej więcej o to chodziło...
@dr_bonzo nie miejmy wszystkich userów za tak genialnych jak my sami (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Możesz przecież dać część instalacji ze swojego własnego serwera przez NET, a wówczas skrypty znajdowały się będą nie u usera tylko u Ciebie. Myślę, że jakieś dodatkowe zabezpieczenie jednego rekordu bazy też rozwiąże problem - tak, żeby user nie mógł zmieniać sam pola installed. Coś się wykombinuje (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
tiraeth
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 789
Pomógł: 41
Dołączył: 30.10.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Można też dodać, że skrypt musi pobrać jeden plik (np. mysql.db) z serwera i pójdzie przez POST'a (hidden: filename=md5('http://serwer.pl/d1o1w1n1l1o1a1d/mysql.db')) i wtedy pobiera plik razem ze sprawdzeniem czy KEY jest prawidłowy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Trzeba dużo kombinować (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Można też inaczej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Jest coś takiego jak KOMPILATOR php... zmienia kod .php na plik wykonywalny .exe (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Tam zrobić formularz do zarejestrowania klucza (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Z tego pliku nie wytnie się kodu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) i wtedy dopiero można przeprowadzić instalację z serwera (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

przykładowy kod sprawdzający klucze (plik tekstowy)

key.php
  1. <?php
  2. if($_POST['klucz'] == &#092;"\")
  3. {
  4.  echo '<form name=\"key\" method=\"POST\" action=\"key.php\">
  5. Klucz: <input type=\"text\" name=\"klucz\"><br />
  6. <span style=\"color:silver\">np. 1A2B3-C4D5E-6F7G8-H9I10</span><br />
  7. <input type=\"submit\" value=\"AKTYWUJ\"></form>';
  8.  die();
  9. }
  10.  
  11. # baza z kluczami
  12. $keyBase = 'keys.txt';
  13. $keys = file($keyBase);
  14. foreach($keys as $id => $key)
  15. {
  16.  $hlp = explode('|+|', $key);
  17.  $klucz = $hlp[0];
  18.  $used = $hlp[1];
  19.  $klucze['key_'.$id] = $klucz;
  20.  $klucze['used_'.$id] = $used;
  21. }
  22.  
  23.  if($id = array_search($_POST['klucz'], $klucze))
  24.  {
  25. list($what, $ide) = explode('_', $id);
  26. $klucz = $klucze['key_'.$ide];
  27. $uzyty = $klucze['used_'.$ide];
  28.  }
  29.  else
  30.  {
  31. die('Nieprawidlowy klucz!');
  32.  }
  33.  
  34.  if($uzyty == 'YES')
  35.  {
  36. echo 'Klucz zostal juz uaktywniony!';
  37.  }
  38.  elseif($uzyty == 'NO')
  39.  {
  40. echo 'Twoj klucz (<b>'.$_POST['klucz'].'</b>) jest prawidlowy!';
  41.  }
  42. ?>


keys.txt
Kod
12345-67890-abcde-fghij|+|NO|+|
00000-11111-22222-33333|+|YES|+|


(IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Np. coś takiego można umieścić (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował Tiraeth 9.02.2005, 14:06:39
Go to the top of the page
+Quote Post
NuLL
post
Post #7





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


To się i tak mija z celem.

@Fibolg - niczego nie wykombinujesz
Go to the top of the page
+Quote Post
Fibolg
post
Post #8





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Chełmno

Ostrzeżenie: (0%)
-----


@NuLL lubię wyzwania... tak na prawdę chodzi o samo przyznawanie kluczy - aplikacja zazwyczaj instalowana będzie przeze mnie także to ja będę miał nad nią pełną władzę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

@Tiraeth masz gdzieś linka do tego? Podobno jest jakaś free wersja, ale ja albo znajduję stronki z 404, albo z płatnymi wersjami kompilatorów...
Go to the top of the page
+Quote Post
Spirit86
post
Post #9





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


nawet jak zabieczycie instalkę, to jaka jest pewność, że ktoś nie zainstaluje produktu na własną rękę (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ?
Go to the top of the page
+Quote Post
Fibolg
post
Post #10





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 1.12.2003
Skąd: Chełmno

Ostrzeżenie: (0%)
-----


Przypuszczam, że takie samo jak z produktami MS (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Fakt licencji pozostaje faktem - Twoje prawa zabezpiecza tekst ustawy o prawie autorskim i pokrewnych. Licencja sprzedana bądź po prostu pirat!
Go to the top of the page
+Quote Post
jamal18181818
post
Post #11





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 12.06.2012

Ostrzeżenie: (0%)
-----


Witam serdecznie, chciałbym odnowić troszkę temat.
Problem jest taki, że ten kod nie przyjmuje innych kluczy, działa tylko na 0.
Czy ktoś mógłby mi wytłumaczyć co w nim jest źle? Będę bardzo wdzięczny.
Do pliku instalacji dodałem kod odpowiedzialny za wczytywanie tam pliku key.php:

Plik instalacyjny, wywołanie:

Cytat
$plik = file_get_contents('http://domena.pl/serwis/install/key.php');
echo '<br /><br />';
highlight_string($plik);


Plik key.php wygląda tak:

Cytat
<?php
if($_POST['klucz'] = 2)
{
echo '<form name=\"key\" method=\"POST\" action=\"key.php\">
Klucz: <input type=\"text\" name=\"klucz\"><br />
<span style=\"color:silver\">np. 1A2B3-C4D5E-6F7G8-H9I10</span><br />
<input type=\"submit\" value=\"AKTYWUJ\"></form>';
die();
}

# baza z kluczami
$keyBase = 'http://domena.pl/serwis/install/keys.txt';
$keys = file($keyBase);
foreach($keys as $id => $key)
{
$hlp = explode('|+|', $key);
$klucz = $hlp[0];
$used = $hlp[1];
$klucze['key_'.$id] = $klucz;
$klucze['used_'.$id] = $used;
}

if($id = array_search($_POST['klucz'], $klucze))
{
list($what, $ide) = explode('_', $id);
$klucz = $klucze['key_'.$ide];
$uzyty = $klucze['used_'.$ide];
}
else
{
die('Nieprawidlowy klucz!');
}

if($uzyty == 'YES')
{
echo 'Klucz zostal juz uaktywniony!';
}
elseif($uzyty == 'NO')
{
echo 'Twoj klucz ('.$_POST['klucz'].') jest prawidlowy!';
}
?>


Plik keys.txt wygląda tak:

Cytat
0|+|YES|+|
1|+|YES|+|
2|+|NO|+|


Ten post edytował jamal18181818 12.06.2012, 15:33:51
Go to the top of the page
+Quote Post
greycoffey
post
Post #12





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Przypisanie w dwóch ifach.
Go to the top of the page
+Quote Post
jamal18181818
post
Post #13





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 12.06.2012

Ostrzeżenie: (0%)
-----


Cytat(greycoffey @ 12.06.2012, 16:43:20 ) *
Przypisanie w dwóch ifach.


O którą część kodu chodzi?
Go to the top of the page
+Quote Post
!*!
post
Post #14





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Mrr kolejny temat o kluczach autoryzacji w PHP (odgrzany kotlet). Tyle lat istnienia języka, a nadal znajdują się osoby które uważają że to coś pomoże. Czytam te wasze pomysły, świetne, nawet klucze można sobie dla lasnu wystylizować na te ala MS, tylko powiedźcie... co w wypadku jak klient będzie chciał to zainstalować na maszynie lokalnej bez dostępu do netu? Zapewniacie support telefoniczny? Tylko to nadal nie zmienia faktu ze aplikacji zainstalować się bez połączenia najzwyczajniej nie da.

Dlatego zamiast kombinować z bzdurną filozofią generowania kluczy dla produktów (o ile nie jest to cześć aplikacji, np. gry komputerowej, w formie urozmaicenia rozrywki) to skupcie się na ulepszaniu kodu jaki napisaliście (IMG:style_emoticons/default/smile.gif)

Ten post edytował !*! 12.06.2012, 16:01:22
Go to the top of the page
+Quote Post
darko
post
Post #15





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Temat stary jak świat. Jeśli wydajność nie jest najważniejsza dla klienta, to najlepiej tak zbudować aplikację, aby najważniejsze funkcjonalności były obsługiwane przez zdalną usługę na waszym serwerze np. poprzez curl i OAuth lub OpenID / SOAP. Reszta to kwestia Waszej implementacji i fantazji. Najważniejsza w takim podejściu jest oczywiście konieczność autoryzacji i system tokenów z krótkim cyklem życia oraz fakt, iż bez komunikacji z Waszą maszyną aplikacja stanie się bezużyteczna. To wszystko da się sensownie zrobić tylko nie w każdej sytuacji i nie przy każdym projekcie.
//edit
Można w ogóle zbudować aplikację w postaci usługi sieciowej (klienta) komunikującego się z Waszym serwerem.

Ten post edytował darko 12.06.2012, 17:00:57
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #16





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Ty nigdy nie używałeś piratów?
Dostaniesz za swoją pracę zapłatę? To nie przejmuj się piratami, jakimiś kluczami, wystarczy licencja, żeby wsparcie prawne w razie czego było.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 10:37