クライアント側のWebアプリケーションに秘密データを安全に保存する


11

すべてのクライアント側テクノロジー(HTML、CSS、JavaScript / AngularJSなど)になるこのWebアプリケーションがあります。このWebアプリケーションは、データにアクセスして変更するためにREST APIと対話します。現時点では、REST APIが使用する認証システムの種類については未定です。

私の理解では、あらゆる種類のAPI認証システム(APIキー、OAuth 1/2など)には特定のデータが含まれる必要があり、そうしないとアクセスが危険にさらされる可能性があります。APIキーの場合、キー自体は秘密である必要があり、OAuth 2の場合、クライアントのシークレット/アクセストークン/リフレッシュトークンを秘密にする必要があります。OAuth1に含まれる4つのキーのいくつかは秘密にする必要があります。 OAuthの経験が多すぎる1)。サーバーサイドに中間層を配置せずに、純粋なクライアントサイドのWebアプリケーションにこの秘密のものを保存する方法があるかどうか考えていました。

私はこれについて考えようとしてきましたが、それを行う場所は考えられません。誰でもソースを表示したり、コンソールを開いてデータを取得したりできるため、JavaScriptに保存することはできません。localStorageの安全性と、ユーザーがそのデータにアクセス/変更できるかどうかは100%わかりません。ローカルストレージが安全であったとしても、そこにデータを取り込む2つの方法は考えられません。一つの方法は、私が考えることができる最も安全でないものであるjavascriptソースコードにデータを保存することです。残りのapi自体がトークンを提供するOAuth 2のようなものを使用している場合、トークンはプレーンテキストとして返されるため、これらのトークンは(最初のオプションよりも)安全ではありません。コンピューターが行っているリクエストは見ることができます。

クライアント側で完全に実行されているアプリケーションに、サーバー側の中間層を使用せずに、機密データを安全に保存できる方法はありますか?



Localstorageはブラウザー固有ですが、Windows上のOperaを例にとると、ユーザーのプロファイルフォルダー内の一部のディスクファイルであるため、本質的に保護されていません。
ロスパターソン

1つの方法は、dbのサーバーに秘密を保持し、クライアントにapplication_idのみを保持することです。次に、サーバーからoauthクエリを実行します。これは、ある種のプロキシアプローチです。
サイモンポラック14

回答:


9

いいえ、完全に安全になることはありません。ユーザーはハードウェアを制御しており、あなたは何かを自分の手に渡さないようにしています。最終的に、彼らは何らかの方法でそれを得ることができます。JavaScriptで作業しているため、ユーザーがハードウェアを制御するだけでなく、実行しているサンドボックスも制御するため、通常のコンピューターアプリケーションよりもはるかに悪い立場にあります。

物事を隠すことができ、物を入手するのを難しくすることができますが、彼らが十分に努力すれば、最終的にそれを取り出すことができます。


4
^これ。秘密データはどの程度「秘密」であり、実際に保護するのにどれだけの時間とお金が必要ですか?「業界標準」の努力で十分かもしれません。
DaveE

+1すばらしい答え。JavaScriptデバッガーを使用すると、アプリケーションを変更したり、中間値を表示したりできます 情報が必要な場合は取得します。
ロスパターソン

2

セキュリティシステムを設計するときは、常に脅威モデルについて考える必要があります。「安全にする」はばかげた要件であり、実行可能または検証可能ではありません。「ユーザーがアプリケーションからアクセストークンを抽出できないようにする」ことははるかに優れており、ソリューションの境界を定義します。「他のユーザーがユーザーのアクセストークンを取得できないようにする」ことも優れており、完全に異なるソリューションスペースを定義します。一方のソリューションは必ずしも他方を解決しません(たとえば、後者はWiFiが関係する場合はSSLを絶対に必要としますが、前者にはまったく影響しません)。


0

1つのオプションは、REST APIがユーザーのログインに基づいてアクセスを許可するかどうかです。アクセスを認証するために他のREST API呼び出しに渡すことができるセッションベースのトークン(GUID、ハッシュされた文字列など)を返すことができます

ユーザーのログイン情報をクライアントマシンに保存することを心配している場合はそうしませんが、ユーザーは毎回アカウントとパスワードの情報を入力する必要があります

OAuthなどに精通しているわけではありませんが、認証情報を永続的に保存する上記の説得力のある理由はまったくありません...


理由としては、常に「快適さ」があり、これは明らかに「セキュリティ」と「安全性」の大敵です。
ヘノン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.