Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQLi:这个登录系统安全吗?_Php_Mysql_Security_Mysqli_Login - Fatal编程技术网

Php MySQLi:这个登录系统安全吗?

Php MySQLi:这个登录系统安全吗?,php,mysql,security,mysqli,login,Php,Mysql,Security,Mysqli,Login,我知道我需要在用户输入中转义单引号和双引号,但不知道这是否是完全安全的解决方案,因为有些命令无论如何都可以执行。有人能分析我的代码并描述我在这里需要做什么吗 几乎位于顶部的代码略有更改。现在它应该更安全了?安全吗 至于密码哈希和验证,几乎是。查找并使用它 至于SQL注入,否。使用参数化查询 至于cookies,否。您的会话cookie应设置httpOnly和secure标志。在php手册中查找最后一个 至于将用户密码的纯文本放入cookie,不,不,一千次不在cookie中使用难以猜测的会话i

我知道我需要在用户输入中转义单引号和双引号,但不知道这是否是完全安全的解决方案,因为有些命令无论如何都可以执行。有人能分析我的代码并描述我在这里需要做什么吗

几乎位于顶部的代码略有更改。现在它应该更安全了?

安全吗

  • 至于密码哈希和验证,几乎是。查找并使用它
  • 至于SQL注入,。使用参数化查询
  • 至于cookies,。您的会话cookie应设置httpOnly和secure标志。在php手册中查找最后一个
  • 至于将用户密码的纯文本放入cookie,不,不,一千次不在cookie中使用难以猜测的会话id,而不是高值机密。与密码相比,会话ID是临时的

如果使用适当的准备好的/参数化的查询,实际上可以防止sql注入,那么就不需要逃避任何事情。为什么要用用户密码设置cookie?我强烈建议您只使用PHPs内置会话系统来保存用户数据,而不是自己管理cookie,并且永远不要将密码存储在任何地方投票关闭,因为这属于@JimL,如果我必须在这里做任何事情,我都不明白。Cookie,因为我以前不知道如何使用会话,现在它在我的站点根目录下工作,更改所有内容都会很痛苦。@如果您需要开始使用准备好的/参数化的查询,而不是将值直接连接到查询字符串中。我建议您改用会话系统。发展有时是痛苦的。
if($_SERVER['REQUEST_METHOD'] == 'POST') {
    $login = $_POST['login'];
    $password = $_POST['password'];

    //if(isset($login) && isset($password)) {
    if((isset($login) && isset($password)) && preg_match('/^[a-z0-9\-\_]+$/i', $login)) {
        if($result = $db->query("SELECT * FROM `users` WHERE `username`='{$login}'")) {
            if($count = $result->num_rows) {
                while($row = $result->fetch_object()) {
                    $user_name = $row->username;
                    $user_password = $row->password;

                    if(password_verify($password, $user_password)) {
                        setcookie('u_log', $user_name);
                        $_COOKIE['u_log'] = $user_name;
                        setcookie('u_pass', $user_password);
                        $_COOKIE['u_pass'] = $user_password;

                        header("Location: /user/$user_name");
                    } else { $error = 1; $err_message = 'Неверный логин или пароль.'; }
                }
            } else { $error = 1; $err_message = 'Неверный логин или пароль.'; }
        } else { $error = 1; $err_message = 'Неверный логин или пароль.'; }
    }
}