繁体   English   中英

使用PHP安全登录

[英]Secure Login with PHP

关于PHP的安全登录,我已经搜索了很长时间。 我发现了一些有趣的内容,尽管我对最安全,最简单的方法仍然不完全满意。

我已经创建了一个简单的系统,尽管我不确定它在哪里安全。 我会尽量简短,以免给您带来细节困扰:

我在数据库中的用户表包含一个名为“ loginToken ”的列。 当用户登录时,会创建一个值( 基于该用户的ID,一个随机数,最后是sha1哈希值 ),该值将插入数据库用户表的loginToken中。

除此之外,还会创建一个具有相同值的$ _CCOKIE。 因此,这些值对于每个用户而言都是完全不同的,并且在用户每次登录时都会交替使用。

现在要检查用户已登录,我使用以下代码:

$user_id = -1; //By default, the user is logged out

if (isset($_SESSION["user"]) && isset($_COOKIE["ut"])) { //Check session and user token exists
    //Get variables
    $uid = $_SESSION["user"]; //Get user ID
    $ut = $_COOKIE["ut"]; //Get user token

    //Compare the user id with the user token in the database
    $sql = mysql_query("
        SELECT COUNT(*)
        FROM `users`
        WHERE `id` = '$uid' AND `login_token` = '$ut'
    ");

    //Get result
    $sql = mysql_result($sql, 0);

    //Found!
    if ($sql == 1) {
        $user_id = $uid; //User logged in!
    }
}

可以理解吗? 如果是这样,那是否足够安全?

谢谢!

您的方法不安全。 用户可以设置一个恶意cookie,该cookie可以对您的数据库进行SQL注入。

使用会话变量。

if ($_SESSION['logged_in'] === true) { ...

这是常用的方法。

通常,您希望用户通过HTTPS安全形式输入用户名和密码。 收到请求时,请将用户名和存储在数据库中的密码的哈希版本与表单提供的哈希版本进行比较。 如果哈希匹配,则设置$ _SESSION ['logged_in'] = true。

在您的代码的后面,检查该会话变量以确保用户已登录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM