Avatar billede Slettet bruger
22. juni 2010 - 12:11 Der er 13 kommentarer og
2 løsninger

Beskyt php-system mod kopiering

Hej

Jeg har udviklet et php-system, som jeg ønsker at beskytte mod kopiering, således det kun kan køre fra det domæne det er indkøbt til.

Jeg ved godt at det i praksis er umuligt at sikre noget 100%, og at det ofte er dyrt og kræver installation af software på webserveren der afvikler systemet, men det er ikke ønskværdigt i min situation.

Jeg har opbygget et licenssystem, der gør at licenseringen fastslåes under login til systemet.

Jeg har lavet det således at alle funktioner i systemet er inaktive, med mindre der er indtastet en gyldig licensnøgle.

Kontrollen for dette, ligger overordnet i ét script der styrer login + rettigheder.

Som jeg ser det, må løsningen derfor være at sikre dette script, f.eks. ved at obfuscere det.

Jeg ved godt at sikringen er forholdsvis simpel, men mit ønske er at sikre at systemet ikke umiddelbar kan kopieres til et andet domæne.

Inputs, tanker, andre forslag osv. er yderst velkomne.
Avatar billede aners Nybegynder
22. juni 2010 - 12:50 #1
Placer kernefunktionerne hos dig selv, og sælg et system som kræver at der er adgang til kernefuntionerne.

Hvis du sælger hele skidtet, kan du ikke sikre noget.
Avatar billede intenz Novice
22. juni 2010 - 13:11 #2
Enig med #1. Sådan noget kan man ikke gøre i praksis, med mindre du selv kontrollerer den server/webhotel systemet ligger på.

Den løsning du har bør fjerne det meste, men en person der forstår php kan nemt omgå din spærring, uanset hvilke forholdsregler du tager.

Du kan også lægge et licens ID i en kommentar i kildekoden (man ikke kan se hvad er), så har du _måske_ mulighed for at identificere hvem der har kopieret systemet, og så tage den gennem sø- og handelsretten hvis det rent økonomisk giver mening
Avatar billede Slettet bruger
22. juni 2010 - 13:20 #3
aners...>
Det var også i overvejelserne, men jeg vurderede at det ikke var en option. Min overvejelse gik på kontrol af licens op mod en central server, men problemstillingen er den samme. Det kan fjernes af en php-kyndig. Det er ikke en option af lægge en del af funktionaliteten på en server hos mig selv.

intenz...>
Ved godt at spærringen kan omgåes, men målet var også kun at forhindre at det umiddelbart kunne kopieres.
Avatar billede intenz Novice
22. juni 2010 - 13:55 #4
Jeg ville helt lade være. At have en central server kan være fint nok i størstedelen af tiden, men den dag den server går ned og kunden forsøger at logge ind i administrationen og intet virker for dem, får du nogle meget sure opringninger. Som kunde ville jeg i hvert ikke bryde mig om sådan en løsning.

Du kan evt. bruge nogle af $_SERVER variablerne. F.eks. SERVER_ADDR eller HTTP_HOST, og så tjekke dem op imod en md5() værdi du har lavet i forvejen. Så slipper du for den centrale server.
Avatar billede nemlig Professor
22. juni 2010 - 13:59 #5
Her er lidt input til en løsning:

Jeg anvender en løsning, hvor jeg på hver kundeinstallation har lavet en "sladrekode", hvor der tjekkes for korrekt domæne.
Hvis systemet flyttes til anden domæne, vil systemet sende ip, domænenavn og oprindeligt domænenavn til min mailadresse.
Jeg har altså lavet en kode, som kalder et script, som ligger på min egen server/webhotel, såfremt der ikke er overenstemmelse mellem det registrerede domænenavn og domænet som afvikler koden.
Koden har jeg krypteret (eller hvad man nu kalder det) med:

$txt = gzinflate(base64_decode($txt));

Koden tjekker jeg med sådan her:

$eval_code = 'XY5Ni4MwGITPK.....';  // min krypterede kode
if(!$eval_code)
{
    exit;
}
else
{
    eval(gzinflate(base64_decode("$eval_code")));
}
Avatar billede Slettet bruger
22. juni 2010 - 14:35 #6
intenz...>
Umiddelbar enig, hvis jeg valgte at licenscheck skulle der være en form for cache, således systemet stadigvæk ville køre videre.

nemlig...>
Der er vel samme problemstilling som vi allerede har drøftet, nemlig at det er let at fjerne for en php-kyndig.

Et check ala:
if ($domain != 'Gyldigt domæne'') {
    // Rapporter om brug på licens
} else {
    // Tillad login
}

Det vil være let at ændre eller fjerne og derfor vil sikringen ikke være så meget anderledes end alle mulige andre løsninger der ligger lokalt.

Umiddelbar vil jeg forsøge at tilføre værdi ved at have en lovlig registreret version.

Det er nemlig ikke muligt at opgradere systemet uden at have en gyldig licens-nøgle og samtidig vil en gyldig licens give adgang til fora, request for change osv.

Forsøges der via systemet at opdatere, vil jeg kunne se hvorfra requesten kommer, og dermed måske fange snydere.

En licensnøgle vil føre tilbage til køberen, således jeg også har en chance for at se hvem der har givet sin kopi videre.

Ellers er det vist bare at få integreret nogle kontroller i stort set alle scripts, således det i hvertfald vil være et stort arbejde at fjerne igen, dog uden at det selvfølgelig må give dårlig performance hos brugeren.
Avatar billede intenz Novice
22. juni 2010 - 15:06 #7
Det vil også være et stort arbejde at implementere det, hvis du vil indsætte i hver controller. Normalt vil det jo se sådan ud
if ($system->isValidLicense()) {
  // gyldig
}

Det er så den nemme måde, men der er stadig bare et sted man skal ændre funktionen til at der bare står 'return true'. Ellers skal du implementere hele logikken i alle controllerne, hvilket gør det svært at vedligeholde.

Alt det her:
---
Det er nemlig ikke muligt at opgradere systemet uden at have en gyldig licens-nøgle og samtidig vil en gyldig licens give adgang til fora, request for change osv.
---
Vil du kunne gøre alligevel, på dit eget site, så længe logind kræves her.

Jeg ville stadig vælge ikke at implementere noget licens-sikkerhed i selve systemet. Det er få der vil have interesse i at kopiere det til andre, og dem der vil kan gøre det uanset hvad du implementerer. Jeg ville bruge min tid andre steder, hvis det var mig.
Avatar billede Slettet bruger
22. juni 2010 - 18:07 #8
Interssant spørgsmål !

Jeg tror ikke man kommer uden om en "central server"
- Men en liste af 2-3-4 servere, så et enkelt nedbrud/overbelastning ikke lægger alle ned!

Dér kunne man lægge en funktion som kaldes med licens-nøglen + domænenavnet (i referrer)
Disse "kombineres" (med en dato-komponent) til en dekrypteringsnøgle, som returneres og bruges til at dekryptere en essentiel del at PHP-sourcen on-the-fly...
Sådan at den ikke-krypterede PHP-kode kun er tilrådighed i RAM - mens den kører...

Det bliver ikke let, og det VIL koste performance!
Avatar billede Slettet bruger
22. juni 2010 - 18:17 #9
Hm.. nej. Det dur jo ikke.
Så skal tyven jo bare indsætte en bid kode som gemmer den dekrypterede PHP-source inden den køres : (

Måske skal selve dekrypterings-algoritmen også returneres fra den centrale server og udstyres med en timer-mekanisme, så den SKAL bruges indenfor f.eks. 10 sekunder.
Dén kalder så den centrale server igen, og får nøglen til at dekryptere den lokale PHP-source (i RAM)
Avatar billede aners Nybegynder
22. juni 2010 - 18:58 #10
Al den kontrol I nævner kan fjernes fra koden. Den ENESTE metode er at få en egen-administreret server til at håndtere kernefunktionaliteten. End of story.
Avatar billede Slettet bruger
23. juni 2010 - 10:06 #11
aners...> Ingen tvivl om at det er mere sikker end de andre forslag der er oppe, men jeg er ikke i tvivl om at nogle af de andre kontroller vi har snakket om vil forhindre en del i at kopiere systemet til en anden server.

Alle der har deltaget i tråden bedes lægge et svar. Pointene deles ligeligt.
Avatar billede intenz Novice
23. juni 2010 - 12:49 #12
svar
Avatar billede nemlig Professor
23. juni 2010 - 13:19 #13
Ellers tak....:)
Avatar billede Slettet bruger
23. juni 2010 - 14:12 #14
mig mig

Dén med en tidsbegrænset dekryptering af lokal PHP-kode er god (om end fuzzy..)
Avatar billede Slettet bruger
23. juni 2010 - 14:12 #15
suk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester