Lizenzsystem mit VB 2010, PHP und MySQLi

    • VB.NET

    Es gibt 81 Antworten in diesem Thema. Der letzte Beitrag () ist von Manawyrm.

      Das hat schon seine Richtigkeit, die werden vorher ja definiert.

      PHP-Quellcode

      1. define('server','euerdatenbankserver'); /* Normalerweise localhost */
      2. define('datenbank','euredatenbank');
      3. define('benutzername','euerbenutzername');
      4. define('passwort','euerpasswort');
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/david/public_html/generate.php on line 3

      [b]Parse error: syntax error, unexpected T_WHILE in /home/david/public_html/get.php on line 8

      Schade..
      [/b]
      Hallo,

      ich nehme diesen Post noch mal aus der Versenkung. Ich habe alles soweit am laufen aber leider tuts der vb code bei mir nicht. Könnte da mal jemand drüber schauen?

      Quellcode

      1. Imports System.Net, System.IO, System.Text
      2. Public Class Form5
      3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      4. Dim License As String = Lizenzcode.Text
      5. ' Ersetzen sie unterhalb 'www.example.com' in ihre Adresse, wo sich die zuvor erstellten PHP-Dateien liegen
      6. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://***.de/lic/get.php"), HttpWebRequest)
      7. Request.Method = "POST"
      8. Request.ContentType = "application/x-www-form-urlencoded"
      9. Dim Post As String = "license=" & License 'POST-Data wird festgelegt
      10. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
      11. Request.ContentLength = byteArray.Length
      12. Dim RequestStream As Stream = Request.GetRequestStream()
      13. RequestStream.Write(byteArray, 0, byteArray.Length) 'Schreibt den POST-Request in den Requeststream
      14. RequestStream.Close()
      15. Dim Response As HttpWebResponse = Request.GetResponse()
      16. RequestStream = Response.GetResponseStream()
      17. Dim reader As New StreamReader(RequestStream)
      18. Dim ServerResponse As String = reader.ReadToEnd() 'Liest den Quelltext aus
      19. reader.Close()
      20. RequestStream.Close()
      21. Response.Close()
      22. If InStr(ServerResponse, "Erfolgreich") Then 'Wenn im Quelltext des get.php 'Erfolgreich' steht
      23. Dim stringdate As String = ServerResponse.Substring(ServerResponse.IndexOf("Gültig :"), +8)
      24. Dim datum As Date = CDate(stringdate)
      25. Dim NowDate As Date = Now
      26. If datum < NowDate Then 'Wenn das Gültigkeitsdatum kleiner ist, als das jetzige Datum
      27. MessageBox.Show("Ihr Lizenzschlüssel ist abgelaufen")
      28. End
      29. ElseIf InStr(ServerResponse, "Fehlgeschlagen") Then 'Wenn im Quelltext des get.php 'Fehlgeschlagen' steht
      30. MessageBox.Show("Ungültiger Lizenzschlüssel")
      31. Else
      32. 'Was nach der Lizenzüberprüfung passiert. :-)
      33. End If
      34. End If
      35. End Sub
      36. End Class


      es ist egal was ich in die textbox eingebe es passiert nix :/
      PHP-Ausgabe? Geh einfach durch den Code und schau an welche Werte gesetzt werden.
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      Also, ich habe mir mal ausgeben lassen was vom server zurück kommt und das ist folgendes



      bei folgendem code

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. $mysqli = new mysqli(server,benutzername,passwort,datenbank);
      4. if($mysqli->connect_error) {
      5. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      6. exit();
      7. }
      8. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");
      9. while($result = $ergebnis->fetch_array()) {
      10. if ($result['license'] = $_POST["license"]) {
      11. if($update = $mysqli->prepare("UPDATE licensesystem SET used=1 WHERE license='".$_POST['license']."'"))
      12. {
      13. echo htmlspecialchars($result['until']);
      14. } else {
      15. echo "Fehlgeschlagen";
      16. }
      17. }
      18. }
      19. ?>


      jemand eine idee und kann mir weiter helfen ?

      Edit:

      Das habe ich mitlerweile gelöst jedoch sagt er mir egal was ich eingebe fehlgeschlagen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kyrinja“ ()

      Hey,
      bitt patche diese SQL Injection :

      PHP-Quellcode

      1. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = $_POST["license"]")) {

      es bringt nichts wenn du den input direkt reinschreibst ...
      MFG 0x426c61636b4e6574776f726b426974
      InOffical VB-Paradise IRC-Server
      webchat.freenode.net/
      Channel : ##vbparadise
      Habe ein fehler in Line 8:

      Parse error: syntax error, unexpected 'while' (T_WHILE) in /users/xxx/www/get.php on line 8

      Code:

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. if($mysqli->connect_error) {
      4. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      5. exit();
      6. }
      7. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'")
      8. while($result = $ergebnis->fetch_array()) {
      9. if $result['license'] = $_POST["license"]) {
      10. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = $_POST["license"]")) {
      11. echo "Erfolgreich";
      12. echo "Gültig: " . htmlspecialchars($result['until']);
      13. } else {
      14. echo "Fehlgeschlagen";
      15. } else {
      16. echo "Fehlgeschlagen";
      17. } }
      18. $ergebnis->close();
      19. $stmt->close();
      20. $update->close();
      21. $mysqli->close();
      22. ?>
      Radio-Player Modul >>1.0<<:
      Fertigstellung: 100%

      Download gibt es per PN :)
      Da fehlt eine Klammer.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Jetzt sagt er mir
      Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) in /users/epvpradio/www/get.php on line 10
      Sorry wenn ich hier jeden einzelnen Fehler ansage aber meine PHP kentnisse sind noch im anfangsstadium, bin noch dabei richtig zu lernen.
      Radio-Player Modul >>1.0<<:
      Fertigstellung: 100%

      Download gibt es per PN :)
      So?

      PHP-Quellcode

      1. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST["license"]."))


      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Trade schrieb:

      PHP-Quellcode

      1. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST["license"]."))
      Habe ich Karotten in den Augen oder schreit das nach SQL-Injection? Sollte man nicht bind_param verwenden, damit die Parameter exscaped werden? (zumal da auch ein Syntaxfehler mit dem letzten " entsteht).
      secure.php.net/manual/de/mysqli.prepare.php

      PHP-Quellcode

      1. $updateStatement = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ?")
      2. $updateStatement->bind_param("s", $_POST["license"]);
      3. $updateStatement->execute();
      4. $updateStatement->close();


      Um ein bisschen Eigenwerbung zu machen:
      Es gibt meiner Meinung nach nur eine "richtige" Herangehensweise, Lizenzsysteme zu implementieren, nämlich diese hier: github.com/nikeee/license-system
      Hat natürlich nicht sowas drinne wie "Der Schlüssel ist bereits in Benutzung", aber das könnte man sich ja hinterher einbauen.
      Von meinem iPhone gesendet

      Cybkill schrieb:

      Das wird bestimmt auch bei line 12 kommen

      Ne, kommt dann da nicht, das liegt an der Abfrage. Lass mal den Punkt und die Quotes hinten weg:

      PHP-Quellcode

      1. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST["license"]))


      Und ja, dann kommt, dass das T_ELSE unerwartet ist, weil's doppelt ist, also einfach eins entfernen.



      Edit @nikeee13: Ah, sah beim Überfliegen so aus, dass dieser Post ihn da schon darauf hingewiesen hatte, aber das war ja von BlackNetworkBit nur mehr ausgegraben und Cybkill's erster Post kam ja erst danach.
      Jo, dann auf jeden Fall schauen, dass Du Dich dagegen noch absicherst, @Cybkill, sonst ist die Datenbank relativ schnell weg vom Fenster. ;)

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ () aus folgendem Grund: Trennlinie eingefügt

      Parse error: syntax error, unexpected 'Erfolgreich' (T_STRING) in /users/epvpradio/www/get.php on line 11

      kommt immer noch was meinst mit T_else

      Also der betroffene Code ist ja:

      PHP-Quellcode

      1. echo "Erfolgreich";


      Hier nochmal der Code:

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. if($mysqli->connect_error) {
      4. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      5. exit();
      6. }
      7. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");
      8. while($result = $ergebnis->fetch_array()) {
      9. if ($result['license'] = $_POST["license"]) {
      10. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST["license"]."))
      11. echo "Erfolgreich";
      12. echo "Gültig: " . htmlspecialchars($result['until']);
      13. } else {
      14. echo "Fehlgeschlagen";
      15. } else {
      16. echo "Fehlgeschlagen";
      17. } }
      18. $ergebnis->close();
      19. $stmt->close();
      20. $update->close();
      21. $mysqli->close();
      22. ?>
      Radio-Player Modul >>1.0<<:
      Fertigstellung: 100%

      Download gibt es per PN :)
      Alleine das preparen eines SQL-Statements führt es nicht aus.

      PHP-Quellcode

      1. if($update = mysqli->prepare(/**/))
      ...wird immer zu True evaluieren, denn $update ist dann ein Object != null. Die Abzweigung wird deshalb immer eingeschlagen aber in der Datenbank ändert sich nichts, weil das Statement ja nicht ausgeführt wird.

      @Trade Falls ich deinen Post richtig verstanden habe: Es nicht escapen, weil es ja vorher schon mit anderem Kram, der in der DB steht, verglichen wurde? Es ist ein Grundsatzding, jeglichen Userinput - egal, was es ist - zu escapen.
      Von meinem iPhone gesendet

      nikeee13 schrieb:

      Es nicht escapen, weil es ja vorher schon mit anderem Kram, der in der DB steht, verglichen wurde?

      Der erste Teil meines Posts bezog sich auf @Cybkill, nicht auf Dich. Du bist mir nur kurz zuvorgekommen.
      Und um sich vor Injections zu schützen, soll er das halt vorher noch durch mysqli_real_escape_string jagen und entsprechend in einer Variable speichern. Oder eben gleich Prepared Statements verwenden, was eh mehr zu empfehlen ist. Ging mir da jetzt nur mehr darum, dass er es mit "." verbinden muss.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

      Zur Zeitiger Code:

      PHP-Quellcode

      1. <?php
      2. require_once "sicher/dbdaten.php";
      3. $mysqli = new mysqli(server,benutzername,passwort,datenbank);
      4. if($mysqli->connect_error) {
      5. echo "Fehler bei der Verbindung:" . $mysqli_connect_error();
      6. exit();
      7. }
      8. $ergebnis = $mysqli->query("SELECT license,until FROM licensesystem WHERE used = '0'");
      9. while($result = $ergebnis->fetch_array()) {
      10. if ($result['license'] = $_POST["license"]) {
      11. if($update = $mysqli->prepare("UPDATE licensesystem SET used = '1' WHERE license = ".$_POST["license"].""));
      12. echo "Erfolgreich. Gültig: " . htmlspecialchars($result['until']);
      13. } else {
      14. echo "Fehlgeschlagen";
      15. }
      16. $ergebnis->close();
      17. $stmt->close();
      18. $update->close();
      19. $mysqli->close();
      20. }

      Das habe ich nun behoben,

      leider kommt ein weiterer fehler,

      Fatal error: Call to a member function close() on a non-object in /users/epvpradio/www/get.php on line 17

      Wäre

      PHP-Quellcode

      1. $stmt->close();

      PHP-Quellcode

      1. $ergebnis->close();
      2. $stmt->close();
      3. $update->close();
      4. $mysqli->close();

      Beiträge zusammengefügt. ~Trade
      Radio-Player Modul >>1.0<<:
      Fertigstellung: 100%

      Download gibt es per PN :)

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Cybkill“ ()