9

サーバー経由でアクセスできる Web サービスのログイン情報をユーザーが保存できるように、構成データベースにサードパーティのパスワードを保存する必要があります。

パスワードを Web サービスに渡す必要があるため、単にパスワードをハッシュしてハッシュを保存することはできません。サービスに送信するための実際のパスワードを取得できる必要があります。

セキュリティ上の理由から、データベースに保存するパスワードを暗号化したいと考えています。パスワードの暗号化に関して私が調べたものはすべて、「ハッシュ化して、暗号化しないでください!」と言っているようです。しかし、この場合は当てはまらないと思います。

VB.NETコードで暗号化/復号化を処理するか、SQL Serverを使用してそれを達成する方が良いかどうか疑問に思っています(ここで見たものから、少なくともSQLでそれを行うことは可能ですが、それがどうかはわかりません)展開の問題がどのようなものになるかを調べるには、さらに調査する必要があります)。

4

2 に答える 2

1

ジョージ・ストッカーに同意します。既存のプロトコルを使用できる場合は、それを使用してください(発生する可能性のある問題とセキュリティの脆弱性の量を10分の1に減らします)。

念のため、オプションがない場合(プロトコルを使用できない場合)。ユーザーがサーバー上で何かをしたときにのみサードパーティのWebサーバーにアクセスする必要がある場合は、次のことをお勧めします。

  • DBにパスワードを保存しないでください

  • サードパーティサービスのパスワードを使用してCookieを作成し、秘密鍵を使用して暗号化します。このCookieをユーザーに送り返します。

  • ユーザーがWebサイトに戻るとすぐに、Cookieを取得して復号化し、Cookieからパスワードを取得して、サードパーティのWebサービスにアクセスするために使用します。

したがって、この場合、誰かがサーバーをハッキングしてデータベースをコピーする場合、サードパーティのWebサービスへのパスワードはありません。この場合、誰かがユーザーのコンピューターをハッキングすると、すべてのCookieが暗号化されるため、ユーザーはそれらを使用して何もできなくなります。

これの唯一のセキュリティ上の弱点は、誰かがサーバーにコードを挿入して、アクティブなユーザーセッションからパスワードを取得できる場合です。

于 2012-08-29T21:35:07.303 に答える
1

一般的に言って、本当のパスワードをハッシュする方が良いですが、あなたの場合、それは不可能のようです。SQLサーバー自体で対称キーを使用して暗号化することは絶対にお勧めしません。その理由は、SQLサーバーが危険にさらされると、暗号化も危険にさらされるためです(キーは同じサーバー上にあるため)。

私がお勧めすることの1つは、どこかに一時的なストアを使用することです。これは、セッションのようなものである可能性があります。ただし、CSRF攻撃やセッション/ Cookieハイジャック攻撃に対して脆弱になる可能性があるため、セッションとCookieの両方の使用には注意してください。ユーザーにパスワードを入力させ、暗号化してCookieに保存し、クライアントIPをCookieに添付して、最初に有効期限のタイムスタンプを追加することもできます(これにより、雪崩効果がより効果的になります。平文の先頭のビットを変更しています)。Webサービスへのリクエストを行うには、クライアント側でレンダリングされるCSRFトークンを添付し、それがgetではなくPOSTであることを要求します。

ユーザーのCookieが盗まれた場合、それはクライアントIPに固有であるため、リクエストを行うことはできません(ただし、ユーザーのIPを偽装している場合を除きますが、その時点で、この攻撃者はそれほど賢くないことがわかります。より大きなペイロードを与える他のより簡単な攻撃ベクトル)。ユーザーが何らかの方法でIPをスプーフィングできる場合、タイムアウトによってCookieが無効になるため、IPを長期間使用することはできません。そして、ユーザーがあなたの暗号化アルゴリズムをうまく破るのに十分賢いなら...あなたはそもそもほとんどチャンスがありませんでした。

于 2012-10-09T01:56:01.167 に答える