簡體   English   中英

如何通過會話令牌和cookie安全地進行身份驗證? 更新

[英]How to authenticate securely by session tokens and cookies? updated

我試圖編寫自己的身份驗證方法(學校項目),但遇到了麻煩。 請告知,如何解決安全身份驗證:

有一個index.php,其中包含需要“保護”的所有內容。 我將在此處復制代碼的相關部分。

更新了index.php

session_start();

function checkUserAuth(){
    $authStatus = false;
    if (isset($_SESSION['PHPSESSID'])){
        if ($_SESSION['PHPSESSID'] == $_COOKIE['PHPSESSID']){
            $authStatus = true;
        }
    }
    return $authStatus;
}

if(!checkUserAuth()){
    include_once(dirname(__DIR__).'/admin/authentication/login.php');
    exit();
}

如果checkUserAuth()確定沒有經過正確身份驗證的用戶,則將包括login.php並停止腳本的其余部分。

更新的login.php:

if(array_key_exists($username, $users) && password_verify($password, $users[$username])){
    $_SESSION['PHPSESSID'] = $_COOKIE['PHPSESSID'];
    $_SESSION['login_user'] = $_POST['user'];

我想這可能發生的是,如果登錄詳細信息正確,則login.php會設置cookie,並刷新頁面。 然后index.php將檢測到cookie,並跳過登錄部分。

登錄已經很清楚了,感謝Juned,我認為它現在可以正常工作了。 但是我不知道這有多安全?

從1到非常高的等級,我錯了嗎?

有很多方法可以做到這一點。 下面的偽代碼不是最有效的,但是應該可以工作,我認為您在上面所做的工作實際上不會起作用。

這有幫助嗎?

login.php偽代碼

<?php

    session_start(); // this function checks if there's a session ID already set, if not, sets one.

    if(array_key_exists($username, $users) && password_verify($password, $users[$username])){
        // do your login details checking here
            // if login details correct
                // set a flag in the $_SESSION superglobal and whatever else you want to store about the user like their username e.g.
                    $_SESSION["loggedIn"] = true;
                    $_SESSION["username"] = "$_POST['user']"; // better practice to fetch a clean version from your database
            //else return user to login page
    }

?>

index.php偽代碼

<?php

    session_start(); // this will fetch the session ID and other variables that you might have set e.g. username, logged in status

    function checkUserAuth(){
        $authStatus = false;
        if (isset($_SESSION['loggedIn']) && $_SESSION['loggedIn'] === true){
            $authStatus = true;
        }
        return $authStatus;
    }

    if(!checkUserAuth()){
        // redirect to login page. e.g.
        header('Location: login.php');
        exit;
    }
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM