Czy to bezpieczna metoda, oop

<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>

To mnie martwi:

Nie zrozumiałem źle metody logowania. Po prostu nie sądzę, że powinien zwrócić ten obiekt. Mogę się mylić i to, co robisz, jest w porządku, ale wątpię w to. Zwracasz pełny obiekt użytkownika z bazy danych, hasła i wszystkich, do potencjalnie niebezpiecznego skryptu. Ktoś mógłby potencjalnie utworzyć nowy plik, a następnie zrobić coś takiego jak var_dump ($ userObject); i mieć wszystkie te informacje

Ponadto uważam, że nie jest intuicyjne zwracanie „magicznej” właściwości z czegoś. To tylko jedna z tych rzeczy, które nie zostały zweryfikowane przed użyciem. Jeśli przeniesiesz to do osobnej metody w swojej klasie auth i zwrócisz wartość „active”, możesz uruchomić dowolną weryfikację, której potrzebujesz, bez skryptu logowania.php, który byłby mądrzejszy.

: Popatrz na to jeszcze raz i choć będziesz musiał znać dane logowania, jeśli w ten sposób miałbyś nadużywać tego obiektu. Moim zdaniem jest jeszcze lepiej, aby je oddzielić w przypadku wycieku. Nie mówię, że wiem, jak ktoś mógłby to zrobić. Wystarczy pomyśleć o tym jako o mniejszym potencjalnym otworze pętli.

Nie udaję, że rozumiem, jak szkodliwi użytkownicy coś zrobią. Po prostu wiem, że ułatwienie im tego nie wydaje się mądre. Może nie ma w tym nic złego, nie jestem ekspertem w dziedzinie bezpieczeństwa. Po prostu szturcham rzeczy, które, gdybym je napisał, zmieniłbym się, ponieważ wydają mi się niebezpieczne. Jeśli naprawdę chcesz wiedzieć, czy jest to niebezpieczne, sugeruję przesłanie tego przykładu do zwykłej społeczności stackoverflow, aby zobaczyć, co mówią.

Czy ma jakiś punkt na temat tego, co mówi? Metoda zostanie użyta w kontrolerze stron, który mam:

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

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

questionAnswers(2)

yourAnswerToTheQuestion