2017-01-29 7 views
0

私は自分の認証方法(学校プロジェクト)を書こうとしましたが、私は立ち往生しています。 安全な認証を解決する方法を教えてください:セッショントークンとCookieで安全に認証する方法は?更新された

「保護する」必要があるすべてのものを含むindex.phpがあります。ここで私のコードの関連部分をコピーします。

checkUserAuth(場合

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(); 
} 

はindex.php更新

)は、適切に認証されたユーザーが何があることを、判断しない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はクッキーを設定し、ページを更新していることです。その後、index.phpはクッキーを検出し、ログイン部分をスキップします。

ログインはかなり分かりやすくなっています。Junedのおかげで、私は今働いていると思います。しかし、私はどれくらい安全なのか分かりません。

1から非常に、私は間違っていますか?

+0

。通常、ほとんどの人が行うことは、他のすべてのコントローラページの開始時に呼び出される設定ページがあることです。その設定ページ内では、start_session()関数を使用してユーザーにセッションIDを与えます。これはクッキーの形式でユーザーに送信され、セッションが終了するまでブラウザとサーバーに保存されます。あなたのユーザを認証した後、$ _SESSIONスーパーグローバルに変数を格納し、次に設定ページでifステートメントを使用して、その変数が存在するかどうかを調べることができます。そうでない場合は、それらをログインページに送信します。 – Juned

+0

アドバイスされたコードで質問を更新しました。これはあなたが提案したものですか? –

答えて

1

これにはさまざまな方法があります。以下の疑似コードは最も効率的ではありませんが、うまくいくはずです。上で行ったことは実際にはうまくいかないと思います。

これは役に立ちますか?あなたが手動でセッションIDを設定していない

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; 
    } 
?> 
+0

更新いただきありがとうございます。私が書いたコードはうまくいきました。 :) –

関連する問題