我正在构建一个基于mysql的注册页面并想要一个确认密码匹配我的问题是,即使我的if / else语句是正确的形式仍然正在处理我可以看到mysql db中的数据。
代码:
<?php
require('connect.php');
// If the values are posted, insert them into the database.
if (isset($_POST['username']) && isset($_POST['password'])){
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$confpassword = $_POST['confirm_password'];
if ($_POST["password"] === $_POST["confirm_password"]) {
$hashPassword = password_hash($password,PASSWORD_BCRYPT);
}
else {
echo 'Password Match Failed', end;// failed :(
}
$query = "INSERT INTO `user` (username, password, email) VALUES ('$username', '$password', '$email')";
$result = mysqli_query($connection, $query);
if($result){
$smsg = "User Created Successfully.";
}else{
$fmsg ="User Registration Failed";
}
}
?>
答案 0 :(得分:1)
您可能希望查看一个框架,以帮助您提供登录等常见任务。它不仅可以让您更轻松,而且使用经过验证的解决方案还具有增强安全性的好处。
目前,您的代码存在一些问题。
$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
...
$query = "INSERT INTO `user` (username, password, email) VALUES ('$username', '$password', '$email')";
$result = mysqli_query($connection, $query);
此代码易受SQL注入攻击,这意味着攻击者可能会删除您的数据库或修改其用户帐户以获取管理员权限。
您使用bcrypt对密码进行哈希处理,这是一个不错的选择,但您没有对哈希做任何事情。相反,普通密码存储在数据库中,使其不安全。
$password = $_POST['password'];
$confpassword = $_POST['confirm_password'];
if ($_POST["password"] === $_POST["confirm_password"]) {
echo 'Password Matched';
}
由于这两个值都是通过POST提交的,因此攻击者可以通过在请求中传递这两个值来轻松绕过您的身份验证。
由于代码将在满足if或else条件时继续,因此也会保存插入数据的部分。这就是为什么每次调用脚本时都会插入一个用户(或者由于重复的唯一字段而导致数据库错误)。
在这个领域很难找到解决问题的完整解决方案。但我首先要分割注册过程(创建用户)和登录(检查用户是否存在以及他们的密码是否匹配)。只需查看我的个人资料,您就可以轻松获得我的一些社交帐户。请随时与我联系,我会尝试安排闲聊或聚会,我可以提供更多帮助。