PHPログイン状態とセキュリティの検証

4023 ワード

固定された秘密鍵でsaltを作るのはよくありません.秘密鍵が漏れると面倒になります.そして、最も苦痛なのは、あなたが漏洩しているかどうかを知らないことです.
ユーザーのパスワード文字列はsaltとしてより良い方法です
署名文字列:
$sign = md5('$user_id+$user+_password[+   UA[+IP  [...]]]');

自分で発揮できるものは何ですか?
クッキーに格納されている文字列は
$token = $user_id.','.$sign;

次に、ユーザーにサーバ側のキャッシュを記録する必要があります.キャッシュはユーザー番号でクエリーされ、少なくともユーザーのパスワードが含まれています.
ユーザーが要求するたびに、キャッシュからパスワードを取りに行ってデジタル署名を再計算します.
次のようなメリットがあります.
  • 秘密鍵漏洩の問題は存在せず、問題が発生しても全ユーザ
  • に影響を与えることはない.
  • slat文字列の漏洩はユーザのパスワードの漏洩に等しく、論理的に厳密な
  • である.
  • $token文字列を持っている人がいても、ユーザーがパスワードを変更すると、古い$tokenはすぐに失効します.
  • これに基づいて、ユーザーレコード設計の専門的なフィールドであるsaltが、ユーザーログインが成功するたびにランダム文字列を生成してsalt内に更新し、デジタル署名計算用に
    //    $user_salt      
    $sign = md5('$user_id+$user_password+$user_salt+...');
    

    これにより、ユーザーが再ログインするたびに、以前の$tokenは必ず失効し、セキュリティが向上するだけでなく、毎回1人だけログインして使用できるようになります.
    最後に、ユーザーがパスワードを変更した後、キャッシュを更新することを忘れないでください.
    PS:
    私自身のシステムはユーザーパスワードを使ってデジタル署名を計算する以外に、ブラウザUAを使って固定秘密鍵の方式をプラスして$tokenに対して対称暗号化をしてやっとcookieの中に置いて、更に多くの保護です
    ======================================================================================
    今私はこのようにしています.
    配列:
    $cookie = array();
    $cookie['username'] = '';
    $cookie['nickname'] = '';
    $cookie['email'] = '';
    $cookie['userid'] = '';
    $cookie['security_token'] = '';
    $cookie = serialize($cookie);
    
    $seCookie = AES::encode(SYSTEM_AUTH_KEY,$cookie);
    Cookie::set('__token',$seCookie);
    Cookie::set('__security_token',$security_token);
    /**
     * cookie     id   security_token      
     */
    

    他のページの検証は見ていました.また、IP、UserAgentなどのパラメータをバインドすることもできます.security_token