[解決済み】ReactJSでJWTをlocalStorageに保存するのは安全か?
質問
現在、ReactJSを使用してシングルページのアプリケーションを構築しています。
を使用しない理由のひとつは、このようなものであると読みました。
localStorage
は、XSSの脆弱性があるためです。
React はすべてのユーザー入力をエスケープするので、これで
localStorage
?
解決方法は?
最近のシングルページアプリケーションでは、クライアントサイドのどこかにトークンを保存する必要があります(最も一般的なユースケース - ページ更新後にユーザーがログインした状態を維持するため)。
全部で2つのオプションがあります。ウェブストレージ(セッションストレージ、ローカルストレージ)、クライアントサイドクッキーです。 どちらの選択肢も広く使われていますが、だからといって安全性が高いとは限りません。
Tom Abbottがうまくまとめている。 JWT sessionStorageとlocalStorageのセキュリティ :
Web Storage(localStorage/sessionStorage)は、同一ドメイン上のJavaScriptからアクセス可能です。つまり、あなたのサイト上で動作するすべてのJavaScriptは、ウェブストレージにアクセスすることができ、このため クロスサイトスクリプティング(XSS)攻撃を受ける可能性があります。 . XSSとは、一言で言えば、攻撃者があなたのページ上で実行されるJavaScriptを注入することができる脆弱性の一種である。基本的なXSS攻撃は、フォーム入力を通じてJavaScriptを注入しようとするものです。
<script>alert('You are Hacked');</script>
をフォームに入力し、それがブラウザで実行され、他のユーザーから閲覧できるかどうかを確認します。
XSSを防ぐために、信頼できないデータはすべてエスケープしてエンコードするというのが一般的な対応です。Reactは(ほとんど)それをやってくれます! 以下は、素晴らしい Reactがどの程度XSS脆弱性対策を担っているかについての議論 .
しかし、これだけでは、起こりうるすべての脆弱性をカバーしきれないのです もうひとつの潜在的な脅威は CDNや外部のインフラでホストされているJavaScriptの使用。 .
ここで再びトムの登場です。
最近のウェブアプリには、A/Bテスト、ファネル/市場分析、広告のためにサードパーティのJavaScriptライブラリが含まれています。私たちはBowerのようなパッケージマネージャを使って、他の人のコードを私たちのアプリにインポートしています。
使用しているスクリプトのうち1つだけが侵害されていたらどうしますか?悪意のあるJavaScriptをページに埋め込むことができ、Web Storageが侵害されます。 この種のXSS攻撃は、あなたのサイトにアクセスした全員のWeb Storageを、知らないうちに取得してしまう可能性があります。 このためか、多くの組織がウェブストレージに価値のあるものを保存しない、あるいはいかなる情報も信用しないようにと忠告しています。これには、セッション識別子とトークンが含まれます。
したがって、私の結論は、ストレージの仕組みとして、ウェブストレージは 転送中に安全な標準を強制しない . Web Storageを読んでそれを使う人は、JWTを常にHTTPSで送信し、決してHTTPで送信しないことを確実にするために、デューディリジェンスを行う必要があります。
関連
-
[解決済み] React.createElement: type is invalid -- expected a string.
-
[解決済み] react router dom v4でwebpack dev serverを構成する方法は?
-
[解決済み] プロップ `history` は `Router` で必須とマークされているが、その値は `undefined` である。
-
[解決済み] Error: yarn start - エラー コマンド "start" が見つかりません。
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] javascriptでlocalStorageをクリアする?
-
[解決済み] localStorage、sessionStorage、session、cookieの違いは何ですか?
-
[解決済み] localStorageの値の最大サイズは?
-
[解決済み] JSONウェブトークンの無効化
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React 17で動作するEnzymeアダプターはどれですか?
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] ReactJsのCreateClassは関数ではない
-
[解決済み] React + TypeScript のエラーです。この呼び出しにマッチするオーバーロードがありません
-
[解決済み] Angular 2の*ngForのReactでの同等品
-
[解決済み] React JS Jestで「SyntaxError: 予期しないトークン"
-
[解決済み] nginxでcertbotを使用する際の問題点
-
[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
-
[解決済み] AxiosにCORSの問題が発生
-
[解決済み] React JSXのforEach()でHTMLが出力されない