Objektorientiert zu Prozedural (PHP)

  • Hey, ich habe folgendes Problem...
    Ich muss derzeit für einen Klienten ein Control Panel erweitern bzw. neu erstellen.
    Leider ist sein altes ein mischmasch aus Prozedural und Objektorientiert.
    da ich leider kein bisschen Objektorientiert kann und auch nicht wirklich die Zeit oder Lust habe mich diesbezüglich reinzulesen erfrage ich hier eure hilfe.
    Ich habe einen Codeschnipsel den ich versuchte zu "dechiffrieren", leider ohne erfolg, könnt Ihr mir diesbezüglich helfen?


    PHP
    if (strtoupper(md5($pass.$player->getSalt())) == strtoupper($player->getPasswort()) ) 
    {
        //Wenn erfolgt
    } else {
        //wenn nicht erfolgt bzw. Passwort inkorrekt
    }

    und mein versuch (Letzter Stand)


    PHP
    if (strtoupper(md5($passwort.$salt)) == strtoupper($passwort) ) 
    {
        //wenn erfolgt
    } else {
        //wenn nicht erfolgt bzw. Passwort inkorrekt
    }
  • Objektorientiert zu prozedural sollte eigentlich ganz einfach sein.


    Zuerst solltest du dir angucken, was $player für einen Typen hat.
    Irgendwo sollte $player per "new [KlassenName]" definiert worden sein.


    Falls du den Typen/die Klasse kennst, guck da rein - such dafür nach "class [KlassenName]".
    Da drin sollte es eine Funktion getSalt() und getPasswort() geben, guck was beide machen.

  • Danke @Bonus für deine schnelle Antwort,


    die Variable $player wird von dem unteren Konstrukt erzeugt.
    $player = Player::byName($nutzername);


    Und in dieser wird die Funktion byName mit der Variable $nutzername aufgerufen.

    PHP
    public static function byName($name){
        $connection = PDOSingleton::connection();
        $statement = $connection->prepare(self::$sql_findByName);
        $statement->bindValue(':name',$name, PDO::PARAM_STR);
        $statement->execute();	
    
    
        return $statement->fetchObject('Player');
    }

    Nun aber zurück zur getSalt()


    PHP
    public function getSalt() {
        return $this->Salt;
    }

    So wie ich das lese wird in dieser Funktion welche Prozedural theorethisch getSalt($nutzername) aufgerufen werden muss, der Salt ausgegeben? Jedoch woher kommt dieser? ?(

  • Da, wo getSalt ist, könnte es einen setter geben - also setSalt(...).
    Wenn nicht, könntest du auch beim Konstruktor gucken - gibt es in dieser Klasse, wo getSalt ist, eine "__construct" Funktion? Wird da Salt verändert?
    Ansonsten wird Salt manuell irgendwo verändert.

  • Ja, aber da wird Salt nicht geändert, ist daher irrelevant.
    Irgendwo wird $Salt gesetzt, das musst du nun finden:
    [VariablenName]->Salt = ...



    Edit:
    Dein Edit kam zu spät -.-'
    Ja, irgendwo wird dann wahrscheinlich setSalt verwendet.


    Such mal in der gleichen Klasse nach $Salt, da wo die Variable definiert wird.
    Steht da ein "private" davor?
    Such mal in der Klasse weiter nach Salt - wird der Salt irgendwo anders auch noch verändert?


    Falls nicht, ist setSalt die einzige Funktion, die du suchen musst.

  • Beim Login oder Register sollte es doch was geben, um das Passwort zu verschlüsseln.

  • Korrekt,


    if (strtoupper(md5($pass.$player->getSalt())) == strtoupper($player->getPasswort()) )
    {
    //Wenn erfolgt
    } else {
    //wenn nicht erfolgt bzw. Passwort inkorrekt
    }


    So wie ich das jetzt der Datenbank entnehme hat jeder Spieler seinen eigenen Individuellen Salt.
    Sprich der Login läuft so ab.

    • Passwort+Salt des Spielers werden zusammen MD5 verschlüsselt und der Hash wird in Großbuchstaben umgewandelt.
    • also strtoupper(md5($passwort.$salt));
    • Danach wird dieses mit dem Passwort des Spielers aus der Datenbank (Welches ja verschlüsselt ist) abgeglichen
    • Erfolg dies dann blablabla
  • Genau - nur wird der Hash in Großbuchstaben nur beim Vergleichen umgewandelt - wohl einfach zur Sicherheit vor Problemen.
    Also wird wohl normal gespeichert.

  • Guck mal, woher $pass kommt.
    Wird das von irgendwoher gesendet?
    Oft ist es ja so, dass es schon beim Frontend etwas verändert wird.

  • $pass ist das eigegebene Passwort

  • Bin nicht der Experte in Web-Entwicklung und kann eigentlich kein PHP ...
    aber werden die ganzen Daten nicht manuell vom Frontend per JavaScript übergeben?
    Kann es nicht sein, dass da das Passwort vorher verändert wird?


    Edit:
    Falls nicht (scheint ja beim Submit automatisch übergeben worden zu werden), sehe ich da bei diesen Zeilen keine Fehler mehr.
    Wahrscheinlich ist was mit dem Salt falsch.

  • Nochmal, weil ich es da im Edit geschrieben hatte:


    Ich kann mir nur noch denken, dass beim Salt etwas verkehrt ist.
    Kannst du das ganze mal ohne Salt testen?

  • Guck mal beim Register, wie das Passwort gespeichert wird.

  • Darauf habe ich leider keinen Zugriff da ich mich nur um den Webauftritt kümmere, Es soll aber das VIO Extended Script sein.

    Sicher, dass es nicht für z.B. Ultimate ist?


    Edit: Nee, dann wäre das Passwort wieder ganz anders.
    Ich check es mal.
    Auf jeden Fall sehe ich in diesem Code kein Problem.


    Edit 2:
    Im normalen Vio Extended wird es genau so gemacht.
    Hab das Gefühl er hat einen anderen Gamemode.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!