Upgrade to Pro — share decks privately, control downloads, hide ads and more …

フロントエンドが知って おきたいセキュリティについて

higuuu
January 19, 2022

フロントエンドが知って おきたいセキュリティについて

フロントエンドが知っておきたいセキュリティについて
これからアプリ開発でwebviewで開発したいと言われたフロントエンドエンジニアに読んで欲しい内容です。
アプリからSPAにトークンを渡す方法について記載しています。

関連記事
【OpenID Connect】ログイン情報連携させる時ってどうするの?
https://menta.work/post/detail/13200/0m3pMbwd9CxzqXiTPLTM

higuuu

January 19, 2022
Tweet

More Decks by higuuu

Other Decks in Programming

Transcript

  1. SPAではない時の構成 index.html xxx.js クライアント サーバー webview アプリ Authorization あり Authorization

    なし token保持 一度アクセスが来た際に Cookieなどでセッションを保持して もらったトークンから認証情報を連携するなど 簡単にログイン状態の引き継ぎができる
  2. SPAの構成 index.html xxx.js クライアント API通信 webview アプリ header Authorization あり

    ソースをとってきた後は headerにあったトークン の情報を保持できない
  3. よくある考察と回答 • wire shark で傍受されるとクエリのトークンの部分が丸見えになる ◦ 暗号化されるのでそれはない。 httpsの暗号化方式である、 TLSではURIがペイロードに含まれるの で暗号化される。ドメイン名は晒されるがクエリに付帯したトークンは無事

    • サーバーサイドのログに残る ◦ ログの取り方によっては残る。ログの取得ルールなどで取らないようにする必要があるが、一番危 険性が高いと思われる。 • GAに残る ◦ ほぼ確実に取得されてしまう。他社に GAの収集結果を渡している場合要注意。 • ブラウザの履歴に残る ◦ webviewは内部ブラウザでかつ個人端末で利用されることが多いのでクライアント側の履歴をそこ まで気にする必要はない。
  4. 案1クエリでトークンを渡す index.html xxx.js クライアント webview アプリ https://xxx? token=ey... https://xxx? token=ey...

    • SPAでもURLは残るのでwebview内で活用できる • TLSで暗号化されている場合ドメイン以外は隠されるので通信を傍受され てもクエリは覗かれない • サーバーログに残ってしまう
  5. 案2ローカルストレージでトークンを渡す index.html xxx.js クライアント webview アプリ https://xxx? token=ey... https://xxx •

    「evaluateJavascript」関数を利用してローカルストレージを操作 window. localStorage
  6. 案4 ワンタイムパスワードを渡す index.html xxx.js クライアント webview アプリ https://xxx https://xxx ?otp=...

    • トークンの代わりにOTPを渡す • webview側からOTPとトークンの交換を行う • 実装方法が煩雑 トークン交換 API otpとtokenをpostで交換 otp