我使用这个代码在我登录form.Everything工作:登录表单的安全防范措施
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$pass=md5($password);
$stmt = $mysqli->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
$stmt->bind_param('ss', $username, $pass);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id);
$stmt->fetch();
if ($stmt->num_rows == 1) { $_SESSION['name']=$id; echo'user logged in';}
else {echo'invalid username/password';}
$stmt->close();
但我应该用别的东西吗?还是够了?我是新准备的语句,所以我想知道语法是否写得很好。
首先,你应该使用password_hash/password_verify而非MD5。 (不过,如果你已经将密码存储为md5,它将不起作用。) –
准备好的声明怎么样?写得好吗? – rimas
准备好的语句部分对我来说看起来很好,但是在保存密码时需要确保它们不包含任何将被'trim'删除的前导/尾随空格。如果切换到使用password_hash + password_verify,则需要将其更改为仅根据用户名进行选择,获取记录,然后验证密码。 –