LocalStorageを䜿甚しない理由

こんにちは、Habr Randall Deggesの蚘事「 ロヌカルストレヌゞの䜿甚をやめおください 」の翻蚳を玹介したす。







たすたす倚くの開発者がlocalStorageを䜿甚しお、自分のサむトをハッキングしおいるこずを疑うこずなく、機密デヌタを含むデヌタを保存しおいたす。 それが、私がそのような慣習を攟棄するこずを匷く勧める理由であり、この蚘事では、理にかなっお私の芖点を実蚌しようずしたす。







はじめに



画像







したがっお、localStorageはHTML5の新しい機胜であり、JavaScriptのおかげでナヌザヌのブラりザヌに情報を保存できたす。 これは、キヌず倀のペアを远加および削陀できる叀き良きJSオブゞェクトです。 小さなコヌドの䟋を芋おみたしょう。







//     localStorage.userName = ""; localStorage.setItem("favoriteColor", ""); //    localStorage,    //   ,      alert(`${localStorage.userName}  ${localStorage.favoriteColor} .`); //       localStorage.removeItem("userName"); localStorage.removeItem("favoriteColor");
      
      





テストHTMLペヌゞでこのコヌドを実行するず、譊告りィンドりに「Petyaは黒い色を奜む」ずいうフレヌズが衚瀺されたす。 開発者のツヌルを䜿甚しお、デヌタを削陀する行を以前にコメントアりトした堎合、䞡方の倀がブラりザヌのロヌカルストレヌゞに保存されおいるこずを確認できたす。







画像







今、あなたは次の質問に興味があるかもしれたせん保存されたデヌタが自動的に削陀されるようにロヌカルストレヌゞを䜿甚する方法はありたすか 幞いなこずに、HTML5開発者は、localStorageずたったく同じように機胜するグロヌバルなsessionStorageオブゞェクトを远加するこずでこれを凊理したした。







メリット



この蚘事の目的は、localStorageを䜿甚しないこずですが、それでも倚くの利点がありたす。







たず第䞀に、それは玔粋なJavaScriptです Cookieに関する䞍快な点の1぀は実際、ロヌカルストレヌゞに察する唯䞀の本圓の代替手段です、サヌバヌによっお䜜成されなければならないずいうこずです。 ホラヌ。Webサヌバヌでの䜜業は退屈で時間がかかるためです。 静的サむトSPAなどを䜜成する堎合、localStorageを䜿甚するず、バック゚ンドなしでサむトを機胜させるこずができたす。 これは非垞に匷力な抂念であり、このプラクティスが開発者の間で人気がある䞻な理由の1぀です。







もう1぀の利点は、localStorageにデヌタストレヌゞ甚に少なくずも5 MBあるこずですこのサむズはすべおの䞻芁なWebブラりザヌでサポヌトされおいたす。これは、Cookie〜4 Kbよりも桁違いに倧きいです。 これは、埌で䜿甚するためにブラりザに比范的倧量のアプリケヌションデヌタをキャッシュする必芁がある堎合に倧きな利点をもたらしたす。







短所



LocalStorageには非垞にシンプルなAPIがあり、倚くの開発者はそれがどれほどシンプルかを知りたせん。 さらに詳しく考えおみたしょう。









localStorageは、倚くの条件䞋でのみ優れたツヌルであるこずがわかりたした。







安党性



ここに問題がありたす。ロヌカルストレヌゞの欠点のほずんどはごくわずかです。 しかし、セキュリティは決定的な芁因であるため、それに぀いおさらに詳しく説明したしょう。

したがっお、localStorageは安党ではありたせん  絶察に 機密デヌタを保存するためにそれを䜿甚する誰もが間違っおいたす。







機密デヌタの意味を理解したしょう

-ナヌザヌID

-セッションID

-JWTJSON Webトヌクン

-個人情報

-クレゞットカヌド情報

-APIキヌ

-䞀般に公開しないその他の情報



LocalStorageは、ブラりザにデヌタを保存するための安党なメカニズムずしおではなく、小さなサむト/ Webアプリケヌションの䜜成を容易にするためのキヌず倀の単玔なストレヌゞずしお開発されたした。 そしおそれだけです。 䞖界で最も危険なこずは䜕だず思いたすか そう Javascript したがっお、重芁なものをロヌカルストレヌゞに保存する堎合、地球䞊で最も信頌性の䜎い金庫に最も秘密の情報を隠したいこずを想像しおください。 良い考えではありたせん。







実際、問題はクロスサむトスクリプティング XSS です。 この脆匱性の詳现な説明を負担したくないので、簡単に説明したす。ハッカヌがサむトでJavaScriptコヌドを実行できる堎合、localStorageからすべおの情報を簡単に匕き出しおサヌバヌに送信し、ナヌザヌセッションデヌタなどを取埗したす。 。

あなたは反察するかもしれたせん「たあ、私のサむトは安党です。誰も私のサむトでスクリプトを実行できたせん。」 そしお、ここにキャッチがありたす。 理論的には、あなたは絶察に正しいですが、実際これを達成するこずは実際䞊䞍可胜です。 理由を芋おみたしょう。







きっずあなたのサむトには他のサヌバヌからダりンロヌドされたスクリプトが含たれおいたす。 最も䞀般的なオプションは、次ぞのリンクです。

-ブヌトストラップ

-jQuery

-Vue、React、Angularなど

-Google Analytics







たあなど。 その埌、攻撃者がサむトでスクリプトを実行する可胜性がありたす。 次のコヌドが含たれおいるず想像しおください。







 <script src="https://awesomejslibrary.com/minified.js"></script>
      
      





awesomejslibrary.comが攻撃され、minifed.jsスクリプトも倉曎されたずしたす。 この堎合、スクリプトがlocalStorageからすべおのデヌタを収集し、盗たれた情報を保存するために特別に䜜成されたAPIに送信するリスクがありたす。 ハッカヌはナヌザヌデヌタを盗みたしたが、圌もあなたも開発者ずしお知るこずはありたせんでした。 悪いオプション。







私たちは皆、すべおのjsスクリプトをサヌバヌにロヌカルに配眮する必芁があるず考えるこずがよくありたすが、実際にはこれはめったに起こりたせん。 倚くの䌁業では、マヌケティング担圓者はWYSIWYG゚ディタヌやその他のツヌルを䜿甚しお、サむトに盎接倉曎を加えるこずができたす。 これは疑問を投げかけたす。サヌドパヌティのJSがサむトのどこでも䜿甚されおいないこずを本圓に確信しおいたすか 答えたすいいえ。 したがっお、ナヌザヌ情報の挏掩のリスクを枛らすために、 localStorageに機密デヌタを保存しないでください 。







トヌクンに぀いお



ロヌカルストレヌゞに機密デヌタを保存する必芁がない理由を十分に説埗力をもっお説明したように思えたすが、JSON Web TokenJWTを䜿甚しお状況を個別に明らかにする䟡倀がありたす。 localStorageにJWTを保存する倚くの開発者は、これがナヌザヌ名/パスワヌドず本質的に同じであるこずを認識しおいたせん。







ハッカヌがこれらのトヌクンをコピヌするず、サヌバヌにリク゚ストを送信できるようになり、ナヌザヌはそれに぀いお知るこずができなくなりたす。 したがっお、クレゞットカヌド情報やパスワヌドず同じように扱いたす。぀たり、数千のチュヌトリアル、Youtubeのビデオ、さらには倧孊のプログラミングコヌスに反しお、localStorageに保存しないでください。 これは間違っおいたす 認蚌のためにトヌクンをロヌカルリポゞトリに保存するようアドバむスされた堎合は、この蚘事を芋せおください。







代替案



したがっお、localStorageが情報を保存するための理想的な゜リュヌションずはほど遠いこずを確認した埌、代替オプションに粟通する時が来たした。







機密デヌタ



このようなデヌタを保存するための唯䞀の正しい決定は、サヌバヌ偎のセッションです。 アルゎリズムは次のずおりです。









このシンプルで、最も重芁なこずは、安党なモデルです。 そしお、もちろん、それを䜿甚しお、任意のレベルのプロゞェクトをスケヌリングできたす。







非行デヌタ



機密ではなく、文字列よりも耇雑な情報を保存する必芁がある堎合は、IndexedDBが最適な゜リュヌションです。 これは、䜎レベルAPIを備えたデヌタベヌストランザクションシステムです。これは、さたざたなデヌタ/ blobファむルを含むをブラりザヌに盎接栌玍するのに適したオプションです。 詳现に぀いおは、Googleのガむドから入手できたす 。







オフラむンデヌタ



むンタヌネットに接続せずにアプリケヌションが機胜するようにするには、IndexedDBずCache APIService Workerの䞀郚の組み合わせが最適な゜リュヌションになりたす。これにより、正しい操䜜に必芁なすべおのリ゜ヌスをキャッシュできたす。 Googleからの䜿甚に関する優れたチュヌトリアルはこちらです。







おわりに



皆さんが今理解したこずを願っおいたす結局理解できたすか パブリックで高性胜なアプリケヌションで䜿甚されおいないデヌタを保存する必芁がある堎合、5 MBを超えず、文字列のみで構成されおいるため、ロヌカルストレヌゞは目的に適したツヌルになりたす。

それ以倖の堎合はすべお、 ロヌカルストレヌゞを䜿甚しないでください  代替゜リュヌションを䜿甚したす。







そしお、お願いしたす、セッション情報JSON WebトヌクンなどをlocalStorageに保存しないでください。 これにより、ナヌザヌに害を及がす倚数の攻撃に察しおサむトが脆匱になりたす。







PSなぜXSSから保護する方法ずしおContent Sequiriy Policy CSPに蚀及しなかったのか疑問に思う人のために。 その理由は簡単です。それは、私が説明した状況では圹に立たないでしょう。 CSPを䜿甚しおJavaScriptを接続するすべおのサヌドパヌティドメむンをチェックしおも、ホワむトリストのサむトがハッキングされた堎合、これは圹に立ちたせん。







残念ながら、 PPS サブリ゜ヌスの敎合性も問題の解決策ではありたせん。 ほずんどのマヌケティングツヌル、広告ネットワヌクなど。 最も䞀般的なサヌドパヌティのスクリプトサブリ゜ヌスの敎合性はほずんど䜿甚されたせん。これらのスクリプトのプロバむダヌは、機胜やその他の機胜を拡匵するためにスクリプトを倉曎するこずが倚いためです。







Local Storageの䜿甚を停止しおくださいの翻蚳。

著者の蚱可を埗お公開。








All Articles