@hwcd
ich hab dein Problem verstanden, keine sorge
ich programmier mir momentan auch einiges, was ich plane an Kunden zu verkaufen. Hab mir da auch einiges an gedanken gemacht.Bin letzten Endes aber zum Schluss gekommen, dass man ausschliesslich durch Quellcodeverschlüsselung seinen Quelltext zumindest schützen kann.
Allerdings: Das wars auch schon. Du hast als Programmierer keine große Chance dein Programm durch Sicherheitsmaßnahmen und externe Abfragen vor Diebstahl zu schützen, denn du musst dir folgendes überlegen:
1.: Sicherst du dein Programm mit externen Datenbankabfragen? Nutzlos, lässt sich von jemandem, der selbst schon länger PHP Programmiert, lockerflockig umgehen, in dem er das umcodet. Da kannste als Urheber nichts machen, hab selbst n CMS gekauft, bei dem ich das zwangsweise machen MUSSTE, weil der Lizenzvergeber tagelang nicht erreichbar war und die Installation von einem Connect zum Lizenzserver abhing. Konnte ich aber umgehen.
2.: Was machste, wenn dein Server nicht erreichbar ist, z.B. weil du die Rechnungen nich bezahlt hast, jemand deinen Server gehackt hat, der Hoster Probleme hat, whatever. In dem Fall biste mächtig am , gerade dann, wenn du als Bedingung für ein lauffähiges CMS bei jedem Seitenaufruf des CMS einen Connect zu deiner Datenbank machst, der dann checkt ob die Lizenz gültig ist.
3.: verschlüsselst du dein CMS mit Zend oder Ioncube haste das problem, dass du nur Kunden nehmen kannst, die rootzugriff auf den Server haben, oder zufällig der Hoster des Kunden schon Zend/Ioncube installiert hat oder installieren wird (machen aber nur sehr wenige, wenn man meiner Erfahrung trauen darf^^)...
4.: wenn du des CMS komplett verschlüsselst, nimmste dem rechtmäßigen lizensierten Besitzer des CMS die möglichkeit selbst hand anzulegen, z.B. für eigene Modifikationen und spezielle anpassungen. Sollte man einem Käufer ja nicht verbieten, bin ich der Meinung.
Altrernativ kann man sagen: Verschlüssel die wichtigsten Programmteile deines CMS. In diesen verschlüsselten Dateien bauste einen Code ein, der die Lizenzdatei auf dem Webspace des kunden mit dem Key im verschlüsseltem Code checkt, stimmt dieser überein, checkt der code deinen Server ab und schaut, ob der Lizenzkey in deiner DB vorhanden ist und wie oft er installiert wurde. Sollte dein Server nicht erreichbar sein, checkt das script eben später nochmal, schränkt aber den Seitenbetrieb des Kunden nicht ein. eventuell bis zu 5x, sollte das Problem dann weiterhin bestehen, wird auf der Website des Kunden eine offizielle Meldung gemacht ala "Bitte überprüfen Sie die Lizenz für das CMS und setzen Sie sich mit der Firma XYZ in Verbindung". Nach 10 weiteren Checks könnte man eine die(); ausgabe machen. Erreichen kann man dass, in dem das Script sich selbst eine verschlüsselte Datei erstellt, hier hineinschreibt, wie oft er schon versucht hatte zu konnektieren. gleichzeitig MUSS er eben diese datei haben, sonst gibt er von vornherein eine die()-Ausgabe aus. Die Infos, wie oft das script versucht hat deinen Server zu connecten musste halt durch einen eigenen algorythmus so gut verstecken, dass ein Mensch dies nicht erkennen kann. beispielsweise erstellste dir einen code mit 1024 zeichen. wählst 12 zeichen an beliebiger stelle aus (die stellen dürfen nie konstant sein, sondern müssen pro installation variieren), an denen du jeweils eine Zahl des Timestamps speicherst, plus die zahl der connects die nicht erfolgreich waren. Als kleines Beispiel zur Verdeutlichung:
Code:
Dateiname: code.php
<?php
$code = '
jshzt38kkhd1tekbjh4ükjbikp1ubkj028626ßnjgjz3478k
jnasdfpösdv9sdf63nkbnjksrf9srg9sgljn24iughkljsnld
8knsef67serlkn3wß0vskdjnv763ijnklnjsdfg0982345k
897z425kjnd0skfgjhsdf97834w25rkjnsedvi7435kjnijkd
';
?>
Würde den Timestamp 1176947062 und die anzahl der vergeblichen Connect-Versuche von 04 ergeben. Sprich dein Code würde z.B. in 24 stunden nochmal einen connect versuchen, schlägt der fehl ändert dein programm den obrigen code komplett (auch die zahlen/ziffern die nicht gebraucht werden) und ersetzt die zahlen an derselben stelle wie oben gezeigt mit dem aktuellen timestamp und der anzahl der versuche mit 05 und gibt auf der Website des Besitzers die Meldung "Bitte mit der firma xyz in Konakt setzen" aus und versuchts weiter, bis letztendlich 15 versuche gescheitert sind. Dann gibts ne die()-meldung aus und das cms wär nicht mehr nutzbar.
Ich hoff, dass ich mich einfach genug ausgedrückt hab^^ falls nich, meld dich, und ich werds vielleicht mit nem erweitertem beispiel erörtern^^
Der einzige Knackpunkt ist hier natürlich wieder die Zend/Ioncube-Verschlüsselung und das Problem, dass nur wenige Server standartmäßig diese Verschlüsselungstechnik von vornherein unterstützen. Und naja, eine Zend-Lizenz zum Verschlüsseln der eigenen Scripte iss ja auch nich grad billig... Ich vermute aber mal, dass eine Kombination aus teilverschlüsselung, inkl. Zend-verschlüsseltem PHP-Code (und verschlüsseltem-Check-Code) die sicherste Methode ist, die eigene Arbeit vor Diebstahl zu schützen...