ユーザー向けの簡単なHTTP覚えている認証システムを作成しようとしています。
私のユーザーはそのように表現される可能性があります
{
"email" : "foo@bar.com",
"password" : "8EC41F4334C1B9615F930270A4F8BBC2F5A2FCD3" // sha1 hash of password
}
したがって、私の考えでは、有効期限が無期限(非常に長い)のCookieを作成する必要があります。このCookieには、データベースからユーザーをフェッチしてユーザーをログインさせるための何らかの情報が保持されます。
私の最初のアイデアは、単にemail:password
文字列をCookieとして保存することでした。ユーザー自身以外にその種の情報を実際に生成できる人はいないので、これは良いことだと思いました。データベースの内容username
とを比較するだけで、ユーザーを非常に簡単に取得できました。password
しかし、それでは、これはあまり良くないと思いました。これにより、パスワードダイジェストが事実上2番目のパスワードに変換され、クリアに保存され、すべてのリクエストでネットワークを介して渡されます。
signature
そのため、ユーザーがログインするたびに生成できるのではないかと思いました。これは基本的に、データベースのユーザーオブジェクトに直接格納されるランダムハッシュです。
ユーザーがログインすると、保存されるこの署名が生成され、Cookieがこの署名を保持します。Webサイトにアクセスするたびに、サイトはどのユーザーがその特定の署名を持っているかを確認し、ユーザーをログインさせます。ログアウトするとCookieが効果的に消去され、新しいログインで新しいランダムな署名が生成されます。
このアプローチは他の脆弱性を考慮に入れていますか?
私はおそらくこれのためにすでに作成されたライブラリを使用する必要があることを知っていますが、これは単にWebセキュリティの演習にすぎません。