Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP , MySQL Hilfe

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP , MySQL Hilfe

    Hallo!

    Ich programmiere derzeit ein Login in Visual Basic, PHP und MySQL.
    Jedoch habe ich ein Problem mit meinem PHP Code..

    Das Login Programm läuft mit: UserID, Username, Passwort, HWID und einem Session Token

    Jedoch wird bei der Anfrage nicht die HWID geprüft und somit kann sich jeder von einem anderen PC in jedes Konto anmelden.

    Wie kann ich das beheben?

    Hier habt ihr den PHP Code von dem Login Script.

    PHP-Code:
    <?php
    require_once 'DBconnect.php';

    if (isset(
    $_GET['hwid'], $_GET['username'], $_GET['password'], $_GET['token'])) {


     
    $username strip_tags($_GET['username']);
     
    $hwid strip_tags($_GET['hwid']);
     
    $password strip_tags($_GET['password']);
     
    $token       $_GET['token'];

     
    $username $DBcon->real_escape_string($username);
     
    $hwid $DBcon->real_escape_string($hwid);
     
    $password $DBcon->real_escape_string($password);

    $check_username $DBcon->query("SELECT username FROM tbl_users WHERE username='$username'");
    $count_username=$check_username->num_rows;
    if (
    $count_username==0) {
        die(
    'Invalid Username, please try again');
    } else {

     
    $query $DBcon->query("SELECT user_id, password, hwid FROM tbl_users WHERE username='$username'");
     
    $row=$query->fetch_array();

     
    $count $query->num_rows;
     if (
    password_verify($password$row['password']) && $count==1) {
          
    $check_hwid $DBcon->query("SELECT hwid FROM tbl_users WHERE hwid='$hwid'");
            
    $count_hwid=$check_hwid->num_rows;
            if (
    $count_hwid==1) {
          
    $check_status $DBcon->query("SELECT status, user_id FROM tbl_users WHERE hwid='$hwid'");
          
    $row_status $check_status->fetch_array();
          
    $result $row_status['status'];
          
    $active "1";
          
    $pending "0";
          if (
    $result == $active) {
                
    $ctoken md5($token);
                die(
    "$ctoken");
        } elseif (
    $result == $pending) {
          die(
    'f642f6472bd671e5e16bb9281ed5be78');
        } else {
          die(
    '2da4a62f14d48b1b34d4bb7839640983');
        }
            } else {
                
    $DBcon->query("UPDATE tbl_users SET status='2' WHERE username='$username'");
                die(
    '2da4a62f14d48b1b34d4bb7839640983');
            }
     } else {
         die(
    'Error 1');
     }
    }
    } else {
     die(
    'Emulated Request, Client information Logged');
    }
    $DBcon->close();
    ?>
    Alles läuft super nur prüft er eben nicht die HWID :/ Hier ist noch ein Screen der Datenbank

    http://prntscr.com/hgxcuk

    Hoffe ihr könnt mir irgendwie helfen


  • #2
    Als erstes mal die Frage in den Raum geschmissen, warum Du nicht alles in einer Query abholst?

    Zweitens stimmt die Aussage so nicht:
    Jedoch wird bei der Anfrage nicht die HWID geprüft
    Du prüfst die doch?!
    Wenn etwas anderes passiert, als Du erwartest, musst Du debuggen. Die einfachste Form ist das Ausgeben der Variablen mit bspw. var_dump(), um zu prüfen, dass die Werte die sind, die Du erwartest.
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche Tutorials

    Kommentar


    • #3
      Siehe: https://php-de.github.io/jumpto/faq/#debugging
      PHP.de Wissenssammlung | Debugging: Finde DEINE Fehler selbst! | mysql_* ist veraltet! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__ | Kein Support per PN

      Kommentar


      • #4
        Die Spalte hw hat keinen UNIQUE constraint. Daher kann $count_hwid auch größer als eins werden, wenn mehr als ein Benutzer dieselbe hwid hat.

        Kommentar


        • #5
          Die Spalte hw hat keinen UNIQUE constraint. Daher kann $count_hwid auch größer als eins werden, wenn mehr als ein Benutzer dieselbe hwid hat.
          Kann nicht sein da jeder pc ja eine eigene einzigartige HWID hat. Selbst wenn sie jetzt auf unique ist kann sich dennoch jeder von einem anderen pc mit jedem konto anmelden

          Kommentar


          • #6
            Ja, und? Deine "HWID" ist eine USER-Eingabe, ergo frei manipulierbar.

            Das wird so nicht funktionieren, Webanwendungen sind darauf ausgelegt, von beliebigen Computern/Browsern aus ausgeführt zu werden.
            Wenn du eine Hardwarebindung brauchst, dann MUSS diese manipulationssicher sein... und das wirst du nicht mit GET Parametern hinbekommen.
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar

            Lädt...
            X