web-dev-qa-db-ja.com

サードパーティサービスのパスワードの保存(Webアプリ)

Iframeにサードパーティのウェブサイトを含むウェブアプリがあります。サードパーティのWebサイトでは、ユーザーがそれらにログインする必要があります。オプションAは、ユーザーにiframe経由で各Webサイトに個別にログインするように要求し、Cookieを使用してユーザーを記憶することです。ただし、これは非常に不便で、一部のユーザーはすべてのWebサイトで1つのログインを選択した方がいいので、それが私の選択肢Bです。

フロントエンドのセキュリティと暗号化にほぼ完全に依存しています。

まず、パスワードを保存します。すべてのユーザーが私のWebアプリへのパスワード(メインパスワード)を持っています。パスワードは、私のWebサイトへのログインに使用される以外に、ユーザーのWebサイトからのユーザー資格情報を暗号化するためにも使用されます。したがって、資格情報は私のサーバーのメインパスワードを使用して暗号化され、ユーザーだけがそれらを解読できます。ここで質問があります。パスワードだけを使用して暗号化する必要がありますか、それとも魔法の秘密鍵などを使用して暗号化を強化できますか?

全体的なプロセス:

  • ユーザーが私のWebアプリにログインします。
  • メインパスワードは、後で使用できるようにブラウザのメモリに保存されます
  • 暗号化された資格情報をサーバーから取得し、メインパスワードを使用してフロントエンドで復号化する

  • 復号化された資格情報はブラウザのメモリに保存されます

  • ログインiframeを開き、postMessageを使用して資格情報をログインiframeに送信します(Origin検証が含まれています)。

  • 自動的にログインします(サイト用の統合プラグインがあるので、それが可能になります)。

Webアプリへのログインと資格情報の復号化は2つの異なるプロセスであることに注意してください。ユーザーがWebサイトを更新してもログインしている場合、資格情報にアクセスできません。彼は再びパスワードを要求されます。サードパーティのWebサイトからのセッションはとにかくブラウザに記憶されるため、これは問題ではありません。

したがって、フロントエンドデータはWebセキュリティによってiframeから保護されます。WebアプリにXSSシンクがないことを確認している限り、これらのパスワードが漏洩することはありませんよね。サーバーが侵害されたとしても。

私がそれを見る唯一の方法は、サーバーが侵害され、誰かがフロントエンドコードを悪意のあるものに編集してパスワードを取得した場合です。しかし、自動ログインをまったく実装しなかったとしても、それは常に危険なことです。

パスワードを保存して使用するための安全な方法であり、問​​題が発生する可能性がある場合は、ご意見をお聞かせください。特に、JavaScriptメモリにパスワードを保存し、資格情報を暗号化する方法は安全ですか。ユーザーパスワードのみを使用するか、そのパスワードにシークレットトークンを追加します(意味があるかどうかは不明です)。それをより安全にするもの。助けてくれてありがとう。

3
Maciej Krawczyk

これを行う最善の方法は、oAuthを使用することです。それが実行可能なオプションであるかどうかを確認するには、Webサイトのドキュメントを確認してください。そうでない場合は、ユーザーの資格情報をWebサーバー、ブラウザ、またはその他の形式で保存することは絶対にお勧めしません。通常、ログインを検証すると、パスワードのハッシュ(およびソルト)がデータベース内のものと一致することを検証します。パスワードは、暗号化された形式ではなく、実際にデータベースに保存されることはありません。このシナリオでは、ユーザーがデータベースを危険にさらすことができたとしても(ブルートフォース攻撃を除いて)、攻撃者がユーザーのパスワードを知る方法はありません。

2
MikeSchem

私があなたの質問を正しく理解しているなら、あなたはあなたのサーバーに彼らのログインを保存する信頼できる仲介者としてあなた自身を提示したいと思います。

どこにでも赤旗や警告を発することなくこれが技術的に可能であったとしても、ユーザーにパスワードで基本的に盲目的にあなたを信頼するように説得するのは難しいでしょう。なぜなら、ログインするときにパスワードをプレーンテキストで処理するからです。偽装します。真剣に悪い考え!

したがって、YOUが本質的にパスワードを処理することについて信頼されているという包括的な法的合意がない限り、法的問題のみに起因するその道には反対することをお勧めします。

技術的には、暗号化されている場合でもパスワードを保存することは常に悪い考えであり、便宜上ユーザーをログインさせるためにそれらのパスワードを使用することはさらに悪い考えです。

私はあなたがそれらの他のサイトを制御できないと思います。それはおそらく、パスワードをシャッフルすることによってではなく、他の方法で信頼を確立できるからです。

2
xmp125a