1

ac# asp.net サイトのクエリ文字列にパスワードを安全に含めることは可能ですか。

いくつかの仮定と私が知っていること -

  1. このサイトには、他のサイトとの間のリンク/画像/javascript/分析はありません。したがって、心配する参照元リンクはありません。
  2. Web ブラウザとの通信はすべて https 経由で行われます。
  3. クエリ文字列がコンピューターの履歴に残ることはわかっています。
  4. ログインに必要なのはパスワード/ユーザー名だけではありません。そのため、単に URL をブラウザーに貼り付けただけでは、ログインにはなりません。

このサイトがクロス サイト スクリプティングやリプレイ攻撃を受けやすい可能性があることはわかっています。これらを軽減するにはどうすればよいですか?

上記のシナリオでは、クエリ文字列にパスワードをどのように含める必要がありますか?

「なぜ」と聞かないでください。これが良い考えではないことはわかっていますが、クライアントが望んでいることです。

4

2 に答える 2

6

SSL

SSL 接続を使用して、パスワードを Web サーバーに安全に送信できます。これにより、クライアント/サーバー間のすべての通信が暗号化されます。

ヘッダーに隠す

基本認証プロトコルは、ユーザー/パスワード情報を HTTP 要求ヘッダーに配置します。C# および他の多くの Web サーバー言語は、この情報にアクセスし、それを使用して要求を認証できます。SSL と組み合わせると、これは非常に安全です。

アプリケーションキーを登録する

上記のいずれも不可能な場合は、ユーザーごとに一意のキーを作成することをお勧めします。パスワードを送信する代わりに、このキーが使用されます。利点は、キーがデータベースに保存され、削除できることです。ユーザーのパスワードは変更されませんが、新しいキーを取得するには再度登録する必要があります。これは、誰かがキーを悪用する可能性がある場合に適しています。

握手する

ハンドシェイクは、クライアントがサーバーにリクエストを送信する場所であり、サーバーはランダムに生成されたキーを返します。次に、クライアントはシークレットを使用してそのキーからハッシュを生成し、それをサーバーに送り返します。サーバーは、クライアントが正しいシークレットを知っているかどうかを確認できます。代わりにパスワードがシークレットであり、クライアントがリクエストにユーザー名の詳細を含める場合も同じことができます。これにより、パスワードを送信することなく認証できます。

パスワードの暗号化

上記のいずれも使用できない場合は、オープン URL 経由でパスワードを送信する前に、JavaScript を使用してパスワードを暗号化することを試みることができます。AES ブロック暗号のオープン ソース バージョンを見つけました。このプロジェクトはJSAESと呼ばれ、128 ~ 256 ビットの暗号化をサポートしています。同じことを行う他の JS ライブラリがあるかもしれません。

于 2013-01-19T00:57:43.063 に答える