$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;
これが私を心配させるものです:
ログイン方法を誤解していませんでした。そのオブジェクトを返す必要はないと思います。私は間違っているかもしれませんし、あなたがしていることはまったく問題ありませんが、私はそれを疑っています. データベースから完全なユーザー オブジェクト、パスワード、およびすべてを、潜在的に安全でないスクリプトに返しています。誰かが新しいファイルを作成してから、var_dump($userObject); のようなことを行う可能性があります。そして、そのすべての情報を持っています
また、何かから「魔法の」プロパティを返すのは直感的ではありません。これは、使用前に検証されていないものの 1 つにすぎません。それを認証クラスの別のメソッドに移動し、「アクティブ」の値を返すようにすると、login.php スクリプトを賢く使わなくても、必要な検証を実行できます。
: もう一度見てみると、そのオブジェクトをそのように悪用する場合は、ログイン情報を知る必要があります。私の意見では、何らかの漏れがある場合に備えて、それを分離することをお勧めします. 誰かがそれを行う方法を知っていると言っているわけではありません。潜在的な抜け穴が 1 つ少ないと考えてください。
悪意のあるユーザーが何かを行う方法を理解しているふりをしているわけではありません。彼らがそうするのをより簡単にすることは賢明ではないように思われることを私は知っています. 私はセキュリティの専門家ではありません。私は、私がそれを書くとしたら、私にとって危険に見えるので、私が変更するであろうことを突っついている. 危険かどうかを本当に知りたい場合は、その例を通常のスタックオーバーフロー コミュニティに送信して、彼らの意見を確認することをお勧めします。
彼は彼の言っていることのいくつかのポイントを持っていますか? このメソッドは、私が持っているページ コントローラーで使用されます。
$user = $auth->login('username, password)
if ($user) {
//do some additional checks... set session variables
}