1

さて、私の質問が好きな人はいないので、言い換えさせてください。

ユーザーはHTMLフォームにログインします。JavaScriptを使用すると、パスワードはローカルでハッシュされます(ソルトも使用されます)。サーバーはパスワード+ソルトがどうあるべきかを知っています、ユーザーはすでに登録されています、何とか何とか。ここで、ユーザーはページを要求します。サーバーはランダムなIDをユーザーに送信します。ユーザーが次のページをロードすると、このランダムIDがローカルに保存されているキーに追加され、ハッシュされてサーバーに送信されます。サーバーは、キーが何であるかとランダムIDを認識し、同じハッシュを実行して比較します。それらが一致する場合、おめでとう、それは適切なコンピュータから来ました。そうでない場合は、誰かがTCP/IPトラフィックを盗聴しています。

これはすべて明らかSSLがないためです。そうでない場合、これは非常に冗長になります。

私の質問-クライアントPCにキーを保存するにはどうすればよいですか?

元の投稿:

こんにちは;

私はPHPコンテンツ管理システムの開発に取り組んでおり、安全なログインシステムを思いついた。唯一の問題は、何らかの形式のクライアント側ストレージ(非常に小さいキーの場合、長さ40文字)が必要になることです。そうしないと、ユーザーはページを読み込むたびにパスワードを入力する必要があります。

PHPまたはJavaScriptを使用して、40文字の小さな文字列をクライアントのPCに保存し、後で取得できるようにする方法はありますか?

編集:クッキーはオプションではありません。この40文字の文字列はクライアントのコンピューターを離れることができず、設定されたすべてのCookieが各HTTPヘッダーとともに送信されます。

繰り返します-クッキーは安全ではなく、これに対する実行可能な選択肢ではありません。

このように作り直します-クライアントはHTTPフォームを送信します。一部のスクリプト言語(JavaScriptなど)では、パスワードはフォームから削除され、サーバーに送信されず、暗号化され、クライアント側に保持されます。これを取得して確認できます(ユーザーに送信されたキーでパスワードをハッシュすることにより)サーバー)。この検証はサーバーに送信され、キーは送信されません

4

9 に答える 9

11

キーを使用してデータ転送を保護するブラウザベースのシステムはすでに存在します。これはSSLと呼ばれます。

于 2009-08-20T18:48:03.713 に答える
5

いくつかの異なるトリックを使用してクライアントの状態を維持できます。トップレベルのフレームを維持し、そこにjavascript変数を保存できます。

Flashローカルの「SharedObject」を使用できます。

SilverlightsのIsolatedStorage

またはGoogleGearsの同等のもの。

しかし..

この考え方に従わないでください。SSLが必要です。安全なものを構築するのではなく、自分やアプリを足元で使用している人を撃つようなものを構築します。

于 2009-08-20T19:31:47.273 に答える
4

まず、「Cookieを使用せずにクライアント側のデータを保存できますか」という質問に答えます。

  • Flash SharedObjectを使用することもできますが、もちろんFlashが必要であり、ユーザーは確認ボックスをクリックして許可する必要があります。
  • HTML5はクライアント側のデータベースを備えているため、別の新しいオプションがあります。
  • クライアント側でGoogleGearsを使用し、ローカルデータベースAPIを使用します

しかし、あなたの目的のために、パスワードを送信しないがパスワードのハッシュを送信するログインフォームを設計することができます。PHPスクリプトは、秘密のソルト値を含むフォームを送信します。次に、送信イベントにフックして、入力されたパスワードをソルトハッシュに置き換えるjavascriptがあります。

于 2009-08-20T18:44:56.917 に答える
3

私はPHP開発者ではありませんが、既存の認証システムを検索することをお勧めします。多くの場合、それらはあなたが書くものよりも少し安全です(それが彼らの主な目的であるため)。また、コードを確認して、コードがどのように実行されたかを確認し、その理由を理解することもできます。

編集:ほとんどの場合、サーバーで認証を処理する必要があります。cookieまたはurlparamの形式でセッション情報をユーザーに転送することは許容されますが、実際の処理はサーバー上で実行する必要があります。そうでなければ、あなたは大きなリスクにさらされています。

于 2009-08-20T18:42:41.320 に答える
2

ブラウザにアクセスする間にCookieを保存する場合は、Cookieを使用します。クライアントのマシンに保存されます。

セッションをより短い期間保存する場合は、セッションを使用します。Webサーバーに保存されます。

于 2009-08-20T18:42:48.810 に答える
1

インターネット上を移動したことのないものを作成したい場合は、基本的にすべてJavaScriptで作成する必要があります。

まず、GoogleGearsのようなものを開始するコードを作成します。GoogleGearsのデータベースを使用してキーを保存します。

次に、残りのページに、GoogleGearデータベースのキーをチェックするJavaScriptを用意します。キーが有効でない場合は、キーを削除し、ユーザーをリダイレクトして、再度ログインさせます。

于 2009-08-20T18:43:41.630 に答える
0

クッキーはそれを行う方法ですが、パスワードをクッキーに保存することはありません。それは(ほとんど)注文です;-)。

セッションを使用して、サーバー側のページ読み込みの間に情報を保存できます。 http://fr.php.net/manual/en/book.session.php

于 2009-08-20T18:41:18.267 に答える
0

ブライアンの言うことに加えて、HTML 5仕様を使用できる場合は、ローカルストレージを利用できます。

http://ajaxian.com/archives/webkit-does-html5-client-side-database-storage

于 2009-08-20T18:51:37.543 に答える
0

あなたのアプローチに問題があるようです。初期JavaScriptの最初のロードはスニッフィングされる可能性があるため、saltアルゴリズムはハッカーから保護されていません。その場合、IDも「公開」されます。つまり、次のスキーマがあるようです(間違っている場合は修正してください):

password + SHA1 => hashed password
hashed password + (ID from server) + (salt from server) => mega hashed password

「メガハッシュパスワード」がハッシュよりも安全である理由を理解するのに本当に問題があります。

于 2009-08-20T19:14:26.700 に答える