web-dev-qa-db-ja.com

localstorageに関するOWASP勧告はまだ有効ですか?

私は現在、Angularで構築された単一ページのアプリケーションであるアプリケーションに取り組んでいます。 HSTSを使用して、HTTPS経由で提供されます。

認証にはAuth0を使用しています。 Auth0のドキュメント ローカルストレージにアクセストークンを保存することをお勧めします。

次に、インターセプターを使用して、これを各HTTP要求のヘッダーに追加します。

ただし、 この答え は、localstorageで機密情報を保存しないことをお勧めします。

答えは2011年で、著者はOWASP HTML5チートシートも共同執筆しました。

HTML5ページに実装されている「localStorage.getItem」と「setItem」の呼び出しに特に注意してください。これは、開発者が機密情報をローカルストレージに配置するソリューションを構築するときに検出するのに役立ちますが、これは悪い習慣です。

2017/2018年の状況は変わったのかしら。 Auth0のガイドラインに従ってもいいですか、それとも別のアプローチを取るべきですか?

49
JMK

個人的には、ユーザーがセッション間で再認証する必要がないことに満足している限り、ローカルストレージの使用に問題はありません。リンクされた回答は、これに対して以下の議論を提供します。私はそれが非常に弱いと主張します-

基礎となるストレージメカニズムは、ユーザーエージェントによって異なる場合があります。つまり、アプリケーションが必要とする認証は、データが格納されているマシンに対するローカル権限を持つユーザーによってバイパスされる可能性があります。したがって、機密情報をローカルストレージに保存しないことをお勧めします。

これは、あらゆる種類の認証トークンに適用されます。管理者権限を持つローカルの誰か(ユーザーの資格情報に関連付けられたキーで暗号化されていないと想定)は、あらゆる種類のストレージから読み取ることができますRAMまたはおそらくネットワークから直接。

彼はまた示唆しています-

(またはWebサイトのXSSの欠陥)

繰り返しますが、これはJavaScriptがアクセスできるあらゆる種類のトークンに適用されます。

51
Hector

ローカルストレージが安全でないと見なされる理由は、ページのコンテキストで実行されるすべてのJavaScriptがこれにアクセスできるためです。これにより、反射型XSSおよび保存されているXSSの脆弱性を介したセッションハイジャックが可能になり、トークンの内容に応じて情報が漏洩する可能性があります。

例:ユーザーが他のユーザーとコンテンツを共有しているページにアクセスし、XSSの脆弱性が保存されている場合、別のユーザーがローカルストレージからトークンを盗む攻撃を仕掛けることができます。

短い有効期限はトークンをリプレイ攻撃から保護するだけですが、ローカルストレージへのアクセスにXSSの脆弱性が存在する場合、有効期限が切れるとローカルストレージからトークンを抽出するポーリングメカニズムを記述できるため、これはアクティブセッションに影響を与えません。

トークンのストレージとしてCookieを使用することをお勧めします。

  • CookieはHTTPとしてのみマークできます。これにより、JavaScriptがCookieにアクセスできなくなります。
  • サーバーで、コードからCookieからトークンを抽出して検証します
  • また、HTTPSに対してのみセキュアとしてマークします

応答するのに十分なポイントがないので、これをここにドロップしてください:

別の考慮事項、あなたの脅威モデルは何ですか? Web上の外部の攻撃者:トークンをサーバーのCookieプロセスに保存します同じマシン上のユーザー(非管理者):セッションストレージの可能性があるため、永続性はありませんローカル管理者:まあ何もない-彼らはローカル管理者であり、システムを所有しています

クライアント認証は、ユーザーとしてのWebアプリケーションにとって実際に実行可能な認証要素ではありません-MFA認証システムがより良い代替手段です

12
McMatty

auth0ブログ のアドバイスに従うと、トークンの有効期限を低く保つことでセキュリティの問題に対処でき、さらに重要なことに、トークンを暗号化できます。

別のアプローチは、OAuth2と関連付けてJSON Webトークンを使用することです。

3
Stefan

私はセキュリティに完全に夢中ではありません。私はそれから何か他のものを読んだ。

「機密トークン情報」の問題は、CookieであれlocalStorageであれ、同じ問題です。

しかし、ローカルストレージにはるかに多くのデータを保存できます。これにより、すべての銀行情報、すべての送金などを保存することをお勧めします(他の危険な情報を挿入してください。医療、司法、... )ローカルストレージに保存し、オフラインでアクセスできるようにします。

Cookieまたはセッションのセキュリティリスクは、サーバー側のセッションタイムアウトによって緩和されます。ただし、ローカルストレージにはタイムアウトがありません。したがって、ローカルストレージに何かを保存する場合は、準備しておくと、いつでもそこに残ります。マシンにアクセスできるすべての人がそれを読み取れるようにしたくない場合は、必ずマシンを削除し、「あらゆる状況」でメカニズムが機能することを確認してください(ローカルストレージのコンテキストでこれが意味することは何でも-これは不可能です)。しかし、私はphp開発者です。修正してください。)

2