0

ユーザーがアカウントを登録すると、列を含むテーブルが作成されます。ユーザーIDとトークン。これは、ユーザーが別のコンピューターにログインするときに私を覚えていることを確認した場合、各コンピューターには異なるトークンがあるためです。

register.php

//user specific table created    
$create = $connectdb->prepare("CREATE TABLE `user-:username` (userid INT, token varchar(200)");
                        $executequery = $create->execute(array("username"=>$username)); 

これがlogin.phpのスニペットです。トークンを作成し、トークンをCookieに保存して、そのユーザー固有のテーブルにトークンを挿入します

  if($remember==1) {
                            $token = md5(uniqid('',true));
                            setcookie('token',$token,time()+60*60*24*365);

                            $rememberquery = $connectdb->prepare("INSERT INTO `user-:username` VALUES ('',:username,:token)");
                            $rememberquery->execute(array(":username"=>$username,":token"=>$token));
$_SESSION['username'][0] = $username;       
$_SESSION['username'][1] = $userid;                 
                            }

今、私は立ち往生しています(私が前のことを正しく行ったと仮定して)。いつ/どのようにCookieトークンをデータベーストークンにチェックしますか?

4

1 に答える 1

4

適切な認証を正しく行うのは難しいので、物事をほぼ正しく行うために、時々少しハッカーを演じる必要があります。まず、セッション管理のチートシートとowaspページを一般的に読む必要があります。

この講義の後、セッション管理のすべきこととすべきでないことを知っておく必要があります。ただし、覚えておく必要がある場合は、チートシートを覚えておいてください;)次のようになります。

  • 値は完全にランダムであるか、暗号的に強力である必要があります(これは注意が必要な場合があります)
  • 受信時に検証する必要があります
  • Cookieで取得したものを信頼することは決してないため、適切な検証が行われない場合、ユーザー名をCookieに保存することは非常に悪い考えです。
  • セッションの有効期限が切れた場合は、新しいセッションを作成し、テーブルのデータを入力して、出来上がり、
  • 何かを永続化する必要がある場合は、Cookieではなくデータベースを使用してください。Cookieは悪く、信頼できません;)

また、すばらしい出版物はマイクロソフトの脅威と対抗策によるものであり、それはあなたに大いに役立つことができます。

于 2012-07-19T19:37:53.007 に答える