0 レビュー
1 回答
PHPログイン、安全ですか?
誰かが私の最初のPHPログインスクリプトを見て、私が間違ったことをした可能性があること、そしてそれが実際に安全であるかどうかについて建設的な批判をしてくれることを望んでいました。ありがとうございます。
パスワードの再ハッシュを正しく使用したかどうかはわかりませんでした。
if (isset($_POST['submit'], $_POST['username'], $_POST['password']))
{
$username = null;
if (isset($_POST['username'])) $username = strip_tags(trim($_POST['username']));
$password = null;
if (isset($_POST['password'])) $password = strip_tags(trim($_POST['password']));
$sql = "SELECT * FROM login WHERE username=?";
$get = $connect->prepare($sql);
$get->execute(array(
$username
)); // Execute the query
if ($get->rowCount() === 1)
{
$row = $get->fetch(PDO::FETCH_ASSOC); // Fetch the result
$db_username = $row['username'];
$db_password = $row['password'];
if ((password_verify($password, $db_password)) && (strlen($username) >= 5) && (strlen($username) <= 10) && (strlen($password) >= 5) && (strlen($password) <= 12))
{
if (password_needs_rehash($password, PASSWORD_DEFAULT))
{
$hash = password_hash($password, PASSWORD_DEFAULT);
$sql = "SELECT * FROM login WHERE username=?";
$get = $connect->prepare($sql); // Use prepare to prevent SQL injection
$sql = "UPDATE login SET password=? WHERE username=?";
$statement = $connect->prepare($sql);
$statement->execute(array(
$hash,
$username
));
}
$_SESSION['auth'] = $db_username;
session_regenerate_id(true);
$sql = "UPDATE login SET last_login=?, ip=? WHERE username=?";
$statement = $connect->prepare($sql);
$statement->execute(array(
$dt,
$ip,
$username
));
$sql2 = "INSERT INTO LOG (username,lastlogin,ip) VALUES (:username,:lastlogin,:ip)";
$statement = $connect->prepare($sql2);
$statement->execute(array(':username'=>$username,
':lastlogin'=>$dt,
':ip'=>$ip
));
reloadPage();
}
else
{
$loginmsg = 'Wrong Username / Password';
}
}
else
{
$loginmsg = 'Wrong Username / Password';
}
}
わからない
0
レビュー
答え :
解決策:
いいえ。 1つの欠陥
$username = null; if (isset($_POST['username'])) $username = strip_tags(trim($_POST['username'])); $password = null; if (isset($_POST['password'])) $password = strip_tags(trim($_POST['password']));
試してみてください
$username = null; if (isset($_POST['username'])) { $username = strip_tags(trim($_POST['username'])); } $password = null; if (isset($_POST['password'])) { $password = strip_tags(trim($_POST['password'])); }
いいえ。 2つの欠陥
より適切に使用するために、常に
algo contants
をpassword_hash()
と一緒に使用してください。if (password_needs_rehash($password, PASSWORD_DEFAULT)) { $cons = array('cost' => 12); $hash = password_hash($password, PASSWORD_DEFAULT, $cons); $sql = "SELECT * FROM login WHERE username=?";
他のすべては私には問題ないようです。
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。