序文Web 開発者にとって、ユーザー エクスペリエンスを向上させ、Web アプリケーションのパフォーマンスを高めるために、Web ブラウザーにデータを保存することは非常に一般的です。ほとんどの場合、LocalStorage と SessionStorage を使用できます。 この記事では、セキュリティとユーザーエクスペリエンスの観点から SessionStorage と LocalStorage を評価します。次に、要件に基づいて適切なオブジェクトを選択する方法について説明します。 SessionStorage と LocalStorage の紹介HTML5 以前は、開発者は一般的に Cookie を使用してクライアントに簡単な情報を保存していました。 HTML5 のリリース後、クライアント上でローカルにデータを保存する新しい方法、つまり Web Storage が提供されました。これは、LocalStorage と SessionStorage に分かれており、JavaScript を介して Web ブラウザーにキーと値のペアの形式でデータを保存できます。 Cookie と比較すると、次の利点があります。
SessionStorageとLocalStorageの使い方ブラウザ ウィンドウ オブジェクトを使用して、SessionStorage および LocalStorage にアクセスできます。次の例を見てください。 セッションストレージ = window.sessionStorage ローカルストレージ = window.localStorage 両方のストレージ タイプで利用できる機能は次のとおりです。 //アイテムを保存する storage.setItem('name', 'アリス') ストレージ.setItem('年齢', '5') //アイテムを読み込む storage.getItem('name') // "Alice" を返します //ストレージオブジェクトの長さを取得する storage.length // 2 を返す //インデックスを通じて対応するキー名を取得します。storage.key(0) // "name" を返します //アイテムを削除する storage.removeItem('名前') //ストレージオブジェクトをクリアする storage.clear() LocalStorage と SessionStorage の違いLocalStorage と SessionStorage の主な違いは、ブラウザ ウィンドウとタブ間でデータが共有される方法が異なることです。 LocalStorage はブラウザのウィンドウやタブ間で共有できます。つまり、複数のタブやウィンドウでアプリケーションを開いている場合、いずれかのタブまたはウィンドウで LocalStorage が更新されると、更新された LocalStorage データが他のすべてのタブとウィンドウに表示されます。 ただし、SessionStorage データは他のタブやウィンドウからは独立しています。 2 つのタブが同時に開かれ、そのうちの 1 つが SessionStorage を更新した場合、他のタブやウィンドウには反映されません。例を見てみましょう。ユーザーが 2 つのブラウザ タブで 2 つのホテルの部屋を予約したいとします。これは個別のセッション データであるため、ホテル予約アプリケーションには SessionStorage の使用が最適です。 安全上の注意Web Storage のストレージ オブジェクトはドメイン名から独立しています。つまり、異なるサイトの Web アプリケーションはそれぞれ独立したストレージ オブジェクトを持ち、相互にアクセスすることはできません。この点では、SessionStorage と LocalStorage は同じです。 たとえば、abc.com にデプロイされた Web アプリケーションは、xyz.com の Web ストレージ オブジェクトにアクセスできません。 サブドメインについても同様です。www.grapecity.com.cn と gcdn.grapecity.com.cn は、同じメインドメインの grapecity.com.cn に属していますが、互いのストレージ オブジェクトにアクセスすることはできません。 また、サブドメインは互いに独立しているだけでなく、http プロトコルと https プロトコルでも異なるため、この点にも注意が必要です。 クロスサイトスクリプティング(XSS)攻撃への対処まず、XSS 攻撃とは何でしょうか? XSS は、Web ページに追加される悪意のあるスクリプトであり、ブラウザーによって読み込まれて実行され、攻撃して個人情報を取得します。 現時点では、LocalStorage と SessionStorage の両方が XSS 攻撃に対して脆弱です。攻撃者は、悪意のあるスクリプトをストレージ オブジェクトに直接追加して実行することができます。したがって、次のような機密性の高い個人情報を Web ストレージに保存することはお勧めしません。
攻撃を回避するにはどうすればいいですか?
ユーザーエクスペリエンスの向上一部の機密データは避けるべきですが、WebStorageを通じてWebアプリケーションのユーザーエクスペリエンスを向上させることができます。 たとえば、ユーザーがフォームに入力しているときに、何らかの理由でタブ/ウィンドウを閉じたとします。ただし、フォームの LocalStorage には、ユーザー フォームを自動的に保存する機能が実装されているため、ユーザーが再度フォームを開くと、以前にユーザーが入力した情報が自動的に復元されます。 <!DOCTYPE html> <html> <本文> <h2>フォームの例</h2> <フォーム> <label for="lname">姓:</label><br> <input type="text" id="lname" name="lname" value="" onchange="save(this)"> <label for="fname">名前:</label><br> <input type="text" id="fname" name="fname" value="getValue(this)" onchange="save(this)"><br> </フォーム> <スクリプト> ローカルストレージ = window.localStorage 関数 save(入力) { localStorage.setItem(入力ID、入力値) } document.getElementById("fname").value=localStorage.getItem("fname") document.getElementById("lname").value=localStorage.getItem("lname") </スクリプト> </本文> </html> 私たちのシナリオは、ユーザーが再度開いたときに、以前に入力されたコンテンツを自動的に復元することであるため、ウィンドウが閉じられると自動的にクリアされるため、ここでは SessionStorage をストレージ オブジェクトとして使用することはできません。 ブラウザキャッシュ用のストレージオブジェクトの使用一般的に、一部のアプリケーション データをキャッシュして、後で Web アプリケーションで使用することができます。たとえば、Web アプリケーションですべての国の通貨データを読み込む必要がある場合、WebStorage を使用しないと、リストを読み込んで取得するたびに HTTP リクエストを発行する必要があります。LocalStorage にデータを保存した後は、データを直接取得できます。 LocalStorage には有効期限がないので、ユーザーはページを開くたびにストレージ オブジェクト内のコンテンツを使用できます。ユーザーが LocalStorage データを削除したい場合も、非常に簡単です。ブラウザのキャッシュ コンテンツをクリアするだけです。 LocalStorage の変更をリッスンするLocalStorage は、ローカルの永続ストレージとして使用できるオブジェクトです。これにデータ ストレージを追加できます。同様に、ユーザー操作によって変更された場合も、それを監視できる必要があります。変更されると、ストレージ イベントがトリガーされます。ウィンドウでこのイベントを監視して、いくつかの論理操作を完了できます。 window.addEventListener('ストレージ', () => { ... }); ウィンドウ.オンストレージ = () => { ... }; 要約と結論ユースケースに応じて、LocalStorage と SessionStorage を選択できます。アプリケーションが複数のブラウザ ウィンドウとタブ間でデータを共有する必要がある場合は LocalStorage を使用し、それ以外の場合は SessionStorage を使用します。 SessionStorage と LocalStorage はどちらも XSS 攻撃に対して脆弱です。したがって、ブラウザのストレージに機密データを保存しないでください。 最後に、WebStorage は非常に便利ですが、次のような状況で使用することをお勧めします。
上記は、Javascript が SessionStorage と LocalStorage を使用する方法の詳細です。Javascript の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: MySQL 5.7.17無料インストール版のインストールと設定
開発環境ウィンドウ開発ツール Visual Studio Codeノードのインストールとnpm Wi...
導入Memcached は分散キャッシュ システムです。Memcached には認証とセキュリティ制...
MySQL自体は再帰構文をサポートしていませんが、自己接続を通じていくつかの単純な再帰を実現できます...
概要:ファイルシステム モジュールは、標準の POSIX ファイル I/O 操作セットをラップしたシ...
問題: mybatis によって返される null 型のデータが消え、フロントエンドの表示にエラーが...
Ubuntu 18.04 を使用する Python 開発者向けの参考資料です。 1. Ubuntu ...
この記事の例では、ストップウォッチタイマーを実装するためのJSの具体的なコードを参考までに共有してい...
この記事では、例を使用して、MySQL クエリのソート関数とクエリ集計関数の使用方法を説明します。ご...
序文決まり文句です。ここでは、フロントエンドとバックエンドの分離についての私の理解についてお話ししま...
3つのモードブリッジ(ブリッジ モード)、NAT(ネットワーク アドレス変換モード)、ホストオンリー...
私はパフォーマンス テストを行うために常に Loadrunner を使用してきました。 Loadru...
Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...
この記事では、例を使用して、MySQL の計画されたタスクとイベントのスケジュールについて説明します...
ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...
最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...