0

ajax の前にパスワードが暗号化されている場合、ハッカーが暗号化されたパスワードを取得し、それを使用してログインするのを防ぐにはどうすればよいでしょうか?

事前にバックエンドから一意のソルトを送信する必要がありますか?
ハッカーもそれをキャプチャできないでしょうか?

私の質問の背景:
私はこのチュートリアル
http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQLチュートリアル
の要約
ブラウザ側でパスワードを暗号化してからバックエンドに送信します。それはdbに保存されます


そのリンクから、 「ハッカーがハッシュ化されたパスワードを取得してログインするのを防ぐにはどうすればよいですか?」という最初のコメントが頭に浮かびました。

4

3 に答える 3

6

何もない。クライアントでパスワードをハッシュするのはひどい考えです。

ブラウザーとサーバー間の通信は、SSL (HTTPS 経由) を使用して適切に暗号化する必要があります。

クライアント側でのハッシュには、次の 2 つの効果があります。

  • SSL の代わりになると示唆することで、サイト所有者に誤った安心感を与えます。
  • JavaScript への依存関係を追加します。
于 2012-11-25T17:40:00.220 に答える
2

これはちょっとばかげています、本当に。Quentin が述べたように、この時点で行ったことはパスワードを変更しただけであり、安全性を高めていません。現在、パスワードは「プライベート文字列」ではなく、sha1(「プライベート文字列」) です。16 進数でエンコードすると、たまたま「5ee913d43470d39020f15ac10ff9cf7a8761b55a」になります。

あるパスワードを別のパスワードと交換しただけです。

パスワードを安全に交換するには、HTTPS を使用するのが最善の方法です。手を下げて。なんらかの理由で HTTPS を機能させることができない場合、または証明書にお金を払いたくない場合は、創造力を働かせる必要があります。

克服するのが最も難しい問題は、ユーザーがパスワードを設定する最初の段階です。公開鍵暗号化を使用しない場合、最適なオプションは、ランダムに生成された対称鍵をフォームで渡し、その鍵を使用してクライアント エンドでパスワードを暗号化し、サーバー エンドで復号化することです。たまたま誰かが交換を監視していると、壊れる可能性があります。しかし、これは公開鍵暗号なしでは解決できない問題です。

パスワードを設定すると、非常に安全にログインできます。サーバーがクライアントのログイン フォームをレンダリングするとき、フォームの一部として nonce を生成できます。

<input type='hidden' name='nonce' value='b45354f5b437c82beeed71d4d56ef3a47d0df2d3'/>
Username: <input type='text' name='username'/><br/>
Password: <input type='password' name='password'/>

Javascript とcrypt-jsなどの暗号化ライブラリを使用して、クライアントはハッシュ化されたメッセージを作成します。メッセージには、タイムスタンプ、ユーザー名、ナンスが含まれている必要があります。次に、HMAC を作成します。

var ts = Math.round((new Date()).getTime() / 1000);
var message = '' + ts + ':' + username + ':' + nonce;
var hash = CryptoJS.HmacSHA1(message, password);

簡単に言えば、ハッシュはパスワードと一緒にハッシュされたメッセージです。

メッセージとハッシュをサーバーに送信します。サーバーはプロセスを逆にする必要があります。

  • メッセージをノンス、日付、およびユーザー名に解析します
  • ナンスがクライアントに与えられたものと同じであることを確認してください
  • 日付が最近のものであることを確認してください (過去 5 分以内など)。
  • ユーザーのパスワードを取得する
  • HMAC 計算を実行し、結果がクライアントによって提供されたハッシュと等しいことを確認します。
于 2012-11-25T18:12:16.773 に答える
1

あなたが投稿したチュートリアルは、クライアント側でハッシュするだけでなく、サーバー側でもハッシュします。

基本的にその登録ページでは、JavaScript がユーザーのパスワードをハッシュしてサーバーに送信します。おそらく、これは誰かが転送中にパスワードを取得するのを防ぐためです。ハッシュ化されたパスワードがサーバー側に送信されると、ソルト化されて再度ハッシュ化されます。

この方法は安全です...しかし、HTTPSを使用している場合、クライアントでハッシュするメリットがあるかどうかはわかりません。

于 2012-11-25T17:44:04.057 に答える