web-dev-qa-db-ja.com

httpsを介したアプリのlocalStorage。どんな期待がありますか?

私はオンラインの成績表を運営しています。生徒のデータを非公開に保つために、すべてのデータをhttps経由で転送します。

ここで、冗長な計算とサーバー要求を回避するためにlocalStorageを使用したいと思います。ただし、HTML5仕様によると、ローカルストレージは暗号化されていません。

ここにユーザーの期待を処理するための業界標準はありますか? 「ローカルストレージを使用しますか?すべてが速くなりますが、コンピュータが危険にさらされている場合、生徒のデータが盗まれる可能性があります。これが公共のコンピュータである場合は、「いいえ」を選択してください。

これのUX側にはどのような傾向がありますか?

10
Riley Lark

ローカルストレージ はWebアプリケーションで利用できる比較的新しい機能ですが、ある種の「業界標準」またはベストプラクティスがすでに現れています。 OWASP HTML5チートシート ケースを検討すると、次のようになります。

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

元のページがhttp:またはhttps:を介して配信されているかどうかに関係なく、マシンへのローカルアクセス(またはWebサイトのXSSの欠陥)により、そこに格納されている情報を抽出できます。つまり、簡単に言えば、機密情報や個人情報を含めるべきではありません。

ローカルストレージの機密性に関する一般的なユーザー確認メッセージテキストは知りませんが、あなたのメッセージはそれを明確にしています。しかし、それでも、機密データをlocalStorageに配置しないことをお勧めします。

免責事項:私はHTML5チートシートの共著者です。

7

@Krzysztof Kotowiczは良い答えを持っています。私は彼の勧告に同意します。

機密情報をローカルストレージに本当に保存したいWebアプリケーションのもう1つの可能性は、暗号化された形式で保存することです。クライアント側のアプリケーションは、それを暗号化して認証し(対称鍵暗号化アルゴリズムとメッセージ認証アルゴリズムを使用)、暗号化されたバージョンを保存できます。データを読み取るために、クライアント側のソフトウェアはMACをチェックして復号化できます。このアプローチを採用する場合、クライアント側のローカルストレージに対称キーを保存しないようにすることが非常に重要です。代わりに、キーはサーバーに永続的に保存する必要があります。クライアントはサーバーにキーを照会してキーをメモリにのみ保存でき、永続ストレージには保存できません。

ただし、ローカルストレージのデータの暗号化には多くの欠点と制限があるため、多くの設定では魅力的ではありません。たとえば、切断モードでアプリケーションを使用できなくなります。これらの理由から、ローカルストレージに機密情報や機密情報を保存しないようにする@Krzysztof Kotowiczのアドバイスは、ほとんどのWebアプリケーションにとっておそらく最良のアドバイスです。

4
D.W.

私は第二に DWからのアドバイス

通常は「ホスト証明アプリ」または「ゼロ知識Webアプリ」と呼ばれるものの開発を検討できます。通常のWebアプリのように見え、動作しますが、すべてのユーザーデータは、アップロードされる前にブラウザー自体によってローカルに暗号化されます。暗号化プロセスの鍵は、サーバーに送信または保存されることのないパスフレーズです。したがって、ユーザー自身以外は誰もデータにアクセスできません。

免責事項:私はこのアプローチを使用するオンラインパスワードマネージャーであるClipperzの共同創設者なので、これは偏ったアドバイスになる可能性があります。

Clipperz Webサイトで、ゼロ知識Webアプリケーションのアーキテクチャーについて詳しく読むことができます。独自に作成する場合は、クリッパープリミティブの Javascriptライブラリ 暗号プリミティブ(AGPLライセンス)を使用するか、スタンフォードのこの他の 暗号ライブラリ を使用できます。

1
Marco Barulli