2

私は Python と Flask を使用して Web サイトを作成していますが、私にとってかなり重要なことについて疑問に思っていました。

以前は、教育を受けていないプログラマーであったため、要求に応じてユーザー名とパスワードを再検証できるように、常にユーザーのパスワードを暗号化せずにセッションに保存していました。現在、私は最初の本格的なウェブサイトを作成しているので、これももっとうまくやりたいと思っています。

たとえば、何らかの方法で別の人のセッション ID を取得するなど、セッション変数を盗聴する方法があることは知っています。セッションデータにアクセスできる人からパスワードを隠すために、パスワードを保存するのに最適な形式を知りたいです。

これまでに考えたオプション:

  • Unencrypted : 論理的に最悪のオプションです。
  • Hashed : たとえばsha256(password)、セッションに保存します。クラッカーはディクショナリ テーブルを使用して暗号化されていないパスワードを取得できるため、これも適切なオプションではありません。
  • Salted & Hashed : たとえばsha256(password+hash)、セッションに保存します。これは 3 つのオプションの中で最も安全ですが、データベース エントリのコピーになるため、私には良い考えとは思えません。クラッカーは、自分のパスワードを自分のハッシュと比較し、データベース全体のソルトとハッシュがどのように作成されているかを突き止めることができます。これが有効な懸念事項かどうかはわかりませんが、Stackoverflow に詳しいユーザーが教えてくれると思います。;)
  • データベースが再帰的にハッシュされた文字列を保存するソルト&ハッシュ:本質的にこれは良いオプションのように思えますが、パスワードを再帰的にハッシュすることは常に悪い考えだと読んだことがあります。

では、この中でおすすめはどれでしょうか?たぶん、私が考えていなかった5番目のものですか?この変数は、ユーザーの資格情報を検証するために使用する必要があることに注意してください。そのため、別のソルトなどで単純にハッシュすることはできません。

4

1 に答える 1

3

ユーザーのパスワードをセッションに保存する必要があるのはなぜですか? 特別な必要性は見当たりませんし、理由もなく潜在的なセキュリティ リスクを生み出しているだけです。

代わりに、ユーザー名と、場合によってはユーザーが認証されたことを示すフラグを保存するだけです。もちろん、ユーザーがログアウトしたときにフラグをクリアする (および/またはセッション データ全体を消去する) 必要があります。これにより、何らかの方法で古いセッション Cookie にアクセスした攻撃者が、ログアウト後にセッションを再開できなくなります。

古い古いセッションをタイムアウトさせることができるように、セッションに「最終アクセス」タイムスタンプを保存することもできます。または、セッション フレームワークの組み込みのセッション有効期限動作に依存することもできますが、バックアップ メカニズムを完全にアプリの直接制御下に置くことをお勧めします。

Ps。明らかに、をするにしても、セッション識別子が暗号的に安全な乱数ジェネレーター (例: Crypto.Random.random ) を使用して生成されていること、および推測できないほど十分な長さであることを確認してください (少なくとも 64 ビット = 16 桁の 16 桁ですが、 128 ビットの方が優れています)。何らかの理由でそれができない場合、別の方法として、そのようなランダム トークンを自分で生成し、それをセッションと Cookie の両方に保存し、実際のセッション データを使用する前にセッション トークンと Cookie トークンが一致することを確認します。 .

于 2013-08-14T12:39:58.023 に答える