0

Apacheサーバーがどのように私を認証するのか疑問に思っています.htpasswd

フォルダ内に.htpasswdファイルがあります。コンテンツは php で生成され、パスワードは次のような関数.htpasswdで暗号化されます。crypt()

crypt($password,mb_substr($password,0,2));

mb_substr($password,0,2)問題は、どのソルトを使用しmy_private_saltても、正しいユーザー名とパスワードの組み合わせを渡すと、サーバーは常に私を認証することです。

それで、その塩のポイントは何ですか?

ありがとう

4

1 に答える 1

0

私は答えを見つけました。

php crypt() 関数は一意のハッシュを生成します。ソルトが指定されていない場合、ランダムなソルトが生成されます。

大きな問題は、パスワードの最初の 8 文字のみがハッシュの生成に使用され、salt の 2 文字のみが使用されることです。

結果のハッシュは、salt + 他の 11 文字で構成されます。

例: crypt('1234567','12') の場合、結果は "120QBxD1IX.Cw" になります。ハッシュの最初の 2 文字 (12) に注目してください。

これにより、Apache サーバーはリクエストを暗号化し、それを .htpasswd ファイルに保存されたハッシュと比較する方法を知ることができます。

より良い説明については、次のリンクを参照してください: http://blog.irreverence.co.uk/?p=858

于 2013-09-28T09:53:18.010 に答える