私は Python と Flask を使用して Web サイトを作成していますが、私にとってかなり重要なことについて疑問に思っていました。
以前は、教育を受けていないプログラマーであったため、要求に応じてユーザー名とパスワードを再検証できるように、常にユーザーのパスワードを暗号化せずにセッションに保存していました。現在、私は最初の本格的なウェブサイトを作成しているので、これももっとうまくやりたいと思っています。
たとえば、何らかの方法で別の人のセッション ID を取得するなど、セッション変数を盗聴する方法があることは知っています。セッションデータにアクセスできる人からパスワードを隠すために、パスワードを保存するのに最適な形式を知りたいです。
これまでに考えたオプション:
- Unencrypted : 論理的に最悪のオプションです。
- Hashed : たとえば
sha256(password)
、セッションに保存します。クラッカーはディクショナリ テーブルを使用して暗号化されていないパスワードを取得できるため、これも適切なオプションではありません。 - Salted & Hashed : たとえば
sha256(password+hash)
、セッションに保存します。これは 3 つのオプションの中で最も安全ですが、データベース エントリのコピーになるため、私には良い考えとは思えません。クラッカーは、自分のパスワードを自分のハッシュと比較し、データベース全体のソルトとハッシュがどのように作成されているかを突き止めることができます。これが有効な懸念事項かどうかはわかりませんが、Stackoverflow に詳しいユーザーが教えてくれると思います。;) - データベースが再帰的にハッシュされた文字列を保存するソルト&ハッシュ:本質的にこれは良いオプションのように思えますが、パスワードを再帰的にハッシュすることは常に悪い考えだと読んだことがあります。
では、この中でおすすめはどれでしょうか?たぶん、私が考えていなかった5番目のものですか?この変数は、ユーザーの資格情報を検証するために使用する必要があることに注意してください。そのため、別のソルトなどで単純にハッシュすることはできません。