8

サーバーにあるユーザー名とパスワードを Web チャット クライアントの JavaScript 関数に渡す必要があります。javascript関数のphpコードを介してユーザー名のパスワードを送信すると、ソース内のユーザーが読み取れるようになり、有害です。

解決策を共有してください。

クライアントのサーバー A からユーザー名のパスワードを取得し、それらの資格情報を JavaScript 関数に送信してから、別のサーバー B に接続します。Facebook や Gmail のチャット作業に似ていますが、ユーザーの資格情報を JavaScript に渡すために行うことチャット サーバーに接続するクライアントについては、Web のどこにも記載されていません。

4

17 に答える 17

18

これは facebook や gtalk のやり方ではないことを保証します。通常、サード パーティの API 開発 (OAuth) をサポートするプロトコルを扱います。これにより、ユーザーは、アプリケーションが自分のアカウントを使用することを許可または拒否できます。クライアント アプリケーションがユーザーの資格情報を認識することは決してありません。これが、OAuth が普及している理由です。

ここにはいくつかのオプションがありますが、クレーム ベース認証が最適なアプローチだと思います。基本的に、サーバー A はクライアントを認証し、システム内でのその役割を装飾するために使用されます。これは、ファイヤー シープ タイプの攻撃を防ぐために、HTTPS 経由で暗号化された Cookie として提供されます。クライアント上で、サーバー B はこの Cookie に問い合わせて、ユーザーがサーバー B で実行する権限を与えられているロールを取得できます。暗号化されている場合、サーバー B は Cookie を復号化する方法を知っている必要があります。技術スタックに応じて、これをサポートするライブラリがいくつかあります。繰り返しますが、Cookie (またはそのための安全なトークン) が送信されるときはいつでも注意することが重要です。HTTPS を介して送信する必要があります。そうしないと、セキュリティで保護されていないワイヤレス ネットワークを介してペイロードが傍受される可能性があります。

編集: 質問に対する私のコメントによると、XMPP を使用している場合は、XMPP ライブラリを使用して HTTPS 経由で認証するだけで十分です。

于 2011-03-14T07:30:09.300 に答える
13

Javascript で検証を行わないでください。PHP コードで行ってください。

于 2011-03-02T11:05:05.863 に答える
8

質問からあなたの目的を伝えるのは難しいですが、クライアントがリモート操作を実行できる方法を制限したいようです。

ユーザー名とパスワードを送信する代わりに、クライアントにサーバーに認証キーを要求させ、特定の条件下でサーバーにキーを受け入れさせることができます。

次に、次の方法でキーの使用を制限できます。

  • クライアントの IP アドレスとユーザー エージェントの確認
  • キーを一度だけ使用できるようにする (例: その使用をデータベースに保存する)
  • キーが生成されたときの制限時間内にキーを使用できるようにする

クライアント側の操作はすべて偽装できると常に想定する必要があります。

質問を正しく理解していれば、これらの SO の質問は同様のことを試みている可能性があります。

于 2011-03-02T11:30:58.967 に答える
4

ブラウザでパスワードを取得する必要がある限り、ユーザーはパスワードを読み取ることができます。ユーザーからパスワードを保護する唯一の方法は、パスワードをブラウザーに送信しないことです。

パスワードの単純なハッシュも使用しないでください。ユーザーはパスワードの代わりにハッシュを使用してチャットサーバーにログインでき、何も解決しないためです。

実際、クリアテキストのパスワードをサーバーに保存するのではなく、ハッシュを保存する必要があります (MD5 が正常に破られているため、SHA-1 が望ましい)。

代わりに

  1. [チャット サーバー] nonceを生成し、保存してクライアントに送信する
  2. [クライアント] ノンスを最初のサーバーに送信する
  3. [ログイン サーバー] パスワード ハッシュとナンスの (SHA-1) ハッシュをクライアントに送り返します。
  4. [クライアント]ナンスとハッシュをチャットサーバーに送り返します
  5. [チャット サーバー] 保存したリストに対してノンスをチェックし、リプレイ攻撃を防ぐためにそれを削除してから、ハッシュを再度計算し、クライアントから取得したものと一致することを確認します
于 2011-03-13T12:30:23.037 に答える
3

確認にパスワードは必要ありません。暗号化ハッシュが必要なだけです。実際、サーバー側であっても平文のパスワードを保存するべきではありません。

クライアントに送信:

sha1(sprintf("%s%s",salt,hash_from_db))

クライアントで確認:

sha1(sprintf("%s%s",salt, hash_func_as_on_srv(password))) == sha1_recieved_from_server

ソルト形式の一意のセッション ID、リモート IP などを生成できます。

于 2011-03-17T10:35:46.593 に答える
0

なぜ実際にクライアント側に保存したいのですか? クライアント側で何らかの識別子を指定する必要がある場合は、実際にサーバー側に保存し、クライアント側で人間が読み取れない識別子を指定するだけで、それを変更すると、評価時にクライアントがアクセスしたいデータになります。ユーザーがアクセス権を持っている場合にのみサーバー上で。

于 2011-03-14T06:58:10.243 に答える
0

facebook やその他のソーシャル ネットワーク サイトは、OAuth (オープン認証) テクノロジを実装して、サイト間の資格情報共有を安全な方法で実装しています。詳細については、これを参照してください。

于 2011-03-11T12:34:16.087 に答える
0

パート I.
サーバー B に認証してログインするためにサーバー A からユーザー名とパスワードを取得するユーザーがサーバー A のインターフェイスを使用している場合、心配する必要はありません。パスワード ボックスにパスワードを入力し、[送信] をクリックします。

あなたの主な関心事は、パスワードが盗聴されないように、ネットワーク経由でプレーンテキストとして送信されるべきではないということです。通信にはSSLを使用します。

パート II。
例を挙げて質問を言い換えさせてください.meebo.com(あなたのサーバーA)のようなものを作りたいと思っています。ユーザーをそれぞれのチャットにログインするには、パスワードを保存し、javascript を使用してそれらのチャット サーバー (サーバー B) に認証のために送信します。

これが必要な場合は、アプローチが間違っています。サーバー A はサーバー B と通信し、すべてのデータをフェッチ/プッシュする必要があります。同様に、サーバー A には独自のチャット インターフェイスが必要です。ユーザーがチャット サーバーに「こんにちは」を送信した場合、そのメッセージをサーバー B に内部的にリダイレクト (プッシュ) する必要があります。同様に、サーバー B からの返信は、サーバー A のインターフェイスでユーザーに直接表示できます。 . このアプローチの良い点は、ユーザー名とパスワードをやり取りして安全ではないものにする必要がないことです。

パート III。
もう1つ追加したいのは、サーバーBのユーザー名とパスワードをサーバーAのデータベースに保存している場合は、利用規約でユーザーに知らせる必要があるということです。

于 2011-04-25T05:59:53.367 に答える
0

サーバー側で(http-apiを使用して)セッションを作成し、それをクライアントセッションに転送(セッションIDなど)できます

http://metajack.im/2008/10/03/getting-attached-to-strophe/を参照してください。

于 2012-07-17T10:36:47.040 に答える
0

最善の方法は、PHP を介して送信することだと思います。

しかし、特別に JS を使用したいので、ここに私が提供できるいくつかのものがあります。

パスワード md5() をエンコードします。安全だと思わない場合は、md5(sha1(sha1())) などの多層暗号化を試してください。パスワードを暗号化してデータベースに保存し、安全とユーザーの安全の両方を確保してください。したがって、パスワードを別の名前または「fun」のようなエイリアスで暗号化して送信し、それがパスワードであることを人々から隠すことができます。

また、パスワードを送信する代わりに、PHP を使用してパスワードで人々を承認し、JS を使用してセッションベースのランダムな「authorization_key」を渡すことができます。これは次回有効期限が切れます。

また、Ajax を使用することもできます。私が上で言った人のためのJSを備えたPHP。

于 2011-03-16T14:33:09.240 に答える
0

または、他のサーバーにアクセスする直前に、ユーザー/パスを要求する ajax 呼び出しを実行することもできます。そうすれば、JavaScript コードに表示されなくなります。

于 2011-03-11T12:26:41.653 に答える
0

(...) サーバーAからユーザー名パスワードを取得します(...)

システムにパスワード サーバーが存在するというのは、非常に悪いことのように思えます。代わりに、AをBのプロキシとして使用できます。クライアントは、 B との間のトラフィックを転送する A に接続する必要ありますユーザーがAで正常に認証されると、保存されたパスワードを使用してBにログインできます。

また、セットアップ全体を考えてみるとよいかもしれません。

于 2011-03-16T16:47:52.713 に答える
0

javascript:function(){getAlementByTagName('password').value} URL でそれを過ぎる

于 2011-04-21T11:29:39.000 に答える
0

ネットワーク上のセキュリティに関心がないので、fiddler/firebug や Wireshark などの他のツールを使用してユーザーがデータを取得するのを防ぐことに関心がないと仮定しても安全ですか?

その場合、「ソースの表示」オプションを使用するか、IE で F12 を押して、データを表示可能なソースの一部にする必要がないように、AJAX を使用することが既に提案されています。

ユーザー名とパスワードを渡すときに理解できないようにしたい場合は、何らかの形式の暗号化を実装する必要があります。潜在的な攻撃者がデータを解読するのをどれだけ難しくしたいかによって、いくつかの選択肢があります。

データの MD5 ハッシュを渡すことができます (両方のサーバーが元のデータにアクセスできると仮定します)。サーバー B は元のデータから MD5 ハッシュを生成し、それをクライアントが渡したハッシュと比較できます。既に指摘したように、これは、ほとんどの Web アプリケーションがクライアント証明書や NTLM などを使用してユーザーを認証しないのと同じように、リプレイ攻撃に対して由緒あるものです。

クライアント経由でユーザー名とパスワードを渡すのではなく、データベース内のユーザー名を指すワンタイム オンリー ID (GUID) を使用し、サーバー B が使用された ID を削除することを選択できます。このようにして、データは秘密に保たれ、リプレイ攻撃を回避できます。<- 暗号化ではありませんが、良い解決策です。

他にも研究できる暗号技術はたくさんありますが、単純にしておきたいと思います。

于 2011-03-17T13:07:04.737 に答える