Sponsor-Board.de

Normale Version: Lizenzsystem
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Guten Morgen,
ich bin aktuell dabei ein Lizenzsystem zu bauen.

Die Idee ist ein HTML/PHP Formular zu haben, da den Code einzugeben, und das Formular fragt dann die MySQL Datenbank ob dieser Code existiert.

Jetzt zu meinem Problem:

Ich will das dieses Script nach "erfolgreicher" Code eingabe eine Datei erstellt wo der Code gespeichert wird und dann soll jedes mal, wenn die Webseite aufgerufen wird die MySQL Datenbank frägt ob dieser Code gültig ist.

Meine Datenbank sieht so aus:

Gültig = 0 oder 1
Key = xxxx-yyyy-zzzz
Benutzt = 0 oder 1

Benutzt soll halt heißen ob der Code schon mal eingegeben wurde, Gültig bei 1 sagt das Script einfach "ok" und bei 0 soll er die Meldung bringen: Lizenz Gesperrt.

Sowas in der Art wie Teklab hat.

Hat jemand ne Idee?

Gruß Nicolas
*Denkfehler von mir*

Du willst also, dass man auf deine Datenbank zugreift sprich DomainA.de soll auf den Webserver von DeinerDomain.de zugreifen, per externen Zugriff.

Das heißt ja, dass DomainA.de eine Datei , die eine Verbindung zur Lizenz-Datenbank DeinerDomain.de, hat.
Das heißt dann wiederum, Inhaber von DomainA.de kann mit der Datenverbindung die Datenbank auslesen. ( so verstehe ich das )

// Andersrum:
DomainA.de hat eine lokale Datenbank, wo der Lizenzcode drinne steht. Das heißt Inhaber von DomainA.de kann den Lizenzcode jederzeit ändern.

Vorschlag:
CURL Abfrage auf deinen Webspace, der den Lizenzcode an dein Skript weitergibt, dementsprechend eine Datenbank-Abfrage macht und das Resultat per JSON an DomainA zurückgibt.
Solche Sachen kann der Inhaber von DomainA aber immer ausklammern, rauslöschen oder was auch immer. Du musst es dann solchen Leuten schwerer machen, indem du einen weiteren Code einfügt, der dann die letzte Überprüfung der Lizenzierung checkt und nach Ablauf einer Frist selber handelt.
@Splak: Wieso liest er die DB aus, er kann doch eine API bereitstellen die nur das Benötigte offen legt?
@simon: Hab den Vorschlag nochmal hinzugefügt. Dieser Gedankengang war von mir, so hat sich das gelesen für mich.

MfG

Splak schrieb:
*Denkfehler von mir*

Du willst also, dass man auf deine Datenbank zugreift sprich DomainA.de soll auf den Webserver von DeinerDomain.de zugreifen, per externen Zugriff.

Das heißt ja, dass DomainA.de eine Datei , die eine Verbindung zur Lizenz-Datenbank DeinerDomain.de, hat.
Das heißt dann wiederum, Inhaber von DomainA.de kann mit der Datenverbindung die Datenbank auslesen. ( so verstehe ich das )

Ja

// Andersrum:
DomainA.de hat eine lokale Datenbank, wo der Lizenzcode drinne steht. Das heißt Inhaber von DomainA.de kann den Lizenzcode jederzeit ändern.

Falsch, da die MySQL Verbindungsdaten auf dem externen Server läuft mit dem Server, und man sich nur als Root von extern anmelden darf.

Vorschlag:
CURL Abfrage auf deinen Webspace, der den Lizenzcode an dein Skript weitergibt, dementsprechend eine Datenbank-Abfrage macht und das Resultat per JSON an DomainA zurückgibt.
Solche Sachen kann der Inhaber von DomainA aber immer ausklammern, rauslöschen oder was auch immer. Du musst es dann solchen Leuten schwerer machen, indem du einen weiteren Code einfügt, der dann die letzte Überprüfung der Lizenzierung checkt und nach Ablauf einer Frist selber handelt.
Ok, wäre auch eine Idee

Ja, also bedeutet das, du brauchst eine API dafür.

Wenn der externe Zugriff nicht erlaubt ist, kann derjenige Webserver ( DomainA.de ) nicht auf die Lizenzdatenbank zugreifen per MySQL Verbindung. ( ist ja verboten )

Dann empfehle ich dir mit Hashcodes zu arbeiten, welches das neue PHP 5.5 direkt mitbringt und ein wenig zu tricksen.

Die Abfrage: ( Nicht getestet, Denkfehler können immer vorhanden sein Tongue )

Code:
<?PHP
$licensecode = $_GET['license'];

/* PHP Code mit MySQL(i) Abfrage */
/* SELECT hash FROM licenses WHERE code = '$licensescode' */
/* $hash = hash in der DB */

            if (password_verify($licensecode, $hash)) { // Wenn der Lizenzcode mit dem Hash übereinstimmt            
                if (password_needs_rehash($hash, PASSWORD_BCRYPT)) {      
                    $hash = password_hash($licensecode, PASSWORD_BCRYPT);                    
                    $update = "UPDATE licenses SET hash = '$hash' WHERE licensecode = '$licensecode'";
                    $result = mysql_query($update);    
                }    
                    $isValid = 1;
                    $isInuse = 1;            
            } else { // Wenn der Lizenzcode nicht mit dem Hash übereinstimmt übereinstimmt                
                    $isValid = 0;
                    $isInuse = 0;                    
            }
    $output = array('license' => $licensecode, 'isValid' => $isValid, 'isInuse' => $isInuse );
    echo json_encode($output);
?>


cURL Abfrage wäre dann:

Code:
<?PHP

    $apiURL = "http://www.deinedomain.de?license=".$license;
    $refURL = "http://www.wo-muss-das-ergebnis-ausgegeben-werden.de";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $apiURL);
           curl_setopt($ch, CURLOPT_REFERER, $refURL);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $http_status = curl_getinfo($http, CURLINFO_HTTP_CODE);
        $output = curl_exec($ch);
        curl_close($ch);
    
        $result = json_decode($output, true);
        
        echo $result['license'];
        echo $result['isValid'];
        echo $result['isInuse'];
?>


Ist alles nicht getestet und auch nicht dafür geeignet es zu kopieren. Es ist lediglich ein Denkanstoß, wie man das umsetzen könnte.

MfG

Referenz-URLs