3つの変数を格納することをお勧めします。 1つはログインしている場合、1つはユーザー名用、もう1つはランダムに生成されたハッシュ用です(ログイン時に生成され、他のユーザー情報とともにデータベースに格納されます)。こうすることで、ユーザー名がCookieに保存されている場合は、そのユーザーのCookieに保存されているユーザー名が変更されます。
例:Cookieデータは次のようになります。 logged_in = true; user = 'admin'; sessionid = [無作為に生成されたID(通常は私が作成したランダムに生成された単語)]
ログインするたびに、新しいセッションIDが生成され、データベースのそれ自身のフィールドに格納されます。今、私が自分のクッキー情報を変更して、ユーザー変数を変更して 'ユーザー'(これはハイジャックしようとしている別のユーザーになります)と言えるでしょうか。セッションIDは2番目のユーザーのセッションIDと一致しなくなり、ログインは拒否されます。ここで
は、私は数週間前に働いていたCIプロジェクトから盗んだ簡単な例です:
function logged(){
$logged_in = $this->session->userdata('logged_in');
if($logged_in){
$userid = $this->session->userdata('userid');
$sessionhash = $this->session->userdata('hash');
$this->db->where('id', $userid);
$this->db->where('hash', $sessionhash);
$query = $this->db->get('members');
if($query->num_rows == 1){
return TRUE;
}else{
return FALSE;
}
}
}
これは、私は、各ロードされたページで、ユーザーのログイン名とパスワードを確認する必要があることを意味するのでしょうか? パスワードデータベースと暗号化方法を安全に保つ最も良い方法は何ですか? –
@Grueいいえ、ログインするときには合理的な無効化ポリシーが必要です。あなたが保護しているものには意味をなさないものがあります(例えば、銀行のウェブサイトには、ビデオにコメントを残すだけの別のセキュリティ上の考慮事項があります)。 – cletus
この回答にはかなり古いものがあります。パスワードのSHA1またはMD5を使用しないでください:http://stackoverflow.com/questions/1581610/how-can-i-store-my-users-passwords-safely –