Ist das eine sichere Methode?

<code>    $salt = $this->get_salt($username);

    if (is_null($salt)) {
        return FALSE;
    }

    $password = sha1(SITE_KEY . $password . $salt);
    $sth = $this->db->prepare("SELECT id, username, active FROM user WHERE username = ? AND password = ?");
    $sth->setFetchMode(PDO::FETCH_OBJ);
    $sth->execute(array($username, $password));

    if (($result = $sth->fetch()) !== FALSE) {
        return $result;
    }

    return FALSE;
</code>

Das macht mir Sorgen:

Ich habe die Anmeldemethode nicht falsch verstanden. Ich denke nur nicht, dass es dieses Objekt zurückgeben sollte. Ich kann mich irren und was Sie tun, ist vollkommen in Ordnung, aber ich bezweifle es. Sie geben das vollständige Benutzerobjekt aus der Datenbank, dem Kennwort und allen Elementen an ein möglicherweise unsicheres Skript zurück. Jemand könnte möglicherweise eine neue Datei erstellen und dann so etwas wie var_dump ($ userObject) ausführen. und alle diese Informationen haben

Außerdem finde ich es einfach nicht intuitiv, eine "magische" Eigenschaft von etwas zurückzugeben. Es ist nur ein weiteres dieser Dinge, die vor der Verwendung nicht überprüft werden. Wenn Sie dies in eine separate Methode in Ihrer auth-Klasse verschieben und den Wert "active" zurückgeben lassen, können Sie jede erforderliche Überprüfung ausführen, ohne dass Ihr login.php-Skript klüger ist.

: Hab es nochmal angeschaut und dabei müssten Sie schon die Anmeldeinformationen kennen, wenn Sie das Objekt auf diese Weise missbrauchen würden. Meiner Meinung nach ist es immer noch besser, es zu trennen, falls es irgendeine Art von Leck gibt. Ich sage nicht, dass ich weiß, wie jemand dazu in der Lage wäre. Stellen Sie sich das als eine potenzielle Lücke weniger vor.

Ich gebe nicht vor zu verstehen, wie böswillige Benutzer etwas tun würden. Ich weiß nur, dass es nicht klug erscheint, es ihnen leichter zu machen. Vielleicht stimmt daran nichts, ich bin kein Sicherheitsexperte. Ich stochere nur in Dingen herum, die sich ändern würden, wenn ich sie schreiben würde, weil sie mir gefährlich erscheinen. Wenn Sie wirklich wissen möchten, ob es gefährlich ist oder nicht, sollten Sie dieses Beispiel der regulären Stackoverflow-Community vorlegen, um zu sehen, was sie sagen.

Hat er einen Sinn für das, was er sagt? Die Methode würde in einem Page Controller verwendet, den ich habe:

<code>$user = $auth->login('username, password)

if ($user) {
//do some additional checks... set session variables
}
</code>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage