3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DBなしのchrome拡張でsecureに認証情報を扱いたい

Last updated at Posted at 2021-05-19
1 / 11

chrome拡張は

  • webのUIで
  • サーバーやDBを用意せず
  • 類似のwebサービスよりも強い権限をもって

ツールが提供できるのが利点


ただしDBをつかわない場合、データを永続化しようとしたときになかなか難儀します。
javascriptからデータを保存したい場合、以下のような方法が考えられます。


  • local storage: 永続、文字列のみ
  • session storage: タブ閉じるとデータが消える
  • chrome storage: chrome限定

どれもkey-value型のデータストア
ただしこれらに重要な情報を置くのはどれもおススメできません


理由

  • chrome storageふくめどれも平文で保存されます
    スクリーンショット (1).png

のchrome storageのドキュメントより


これらのstorageに保存した情報は、保存したサイトと同じドメインのサイトでなくてはアクセスできませんが、サイトやchrome拡張内にXSSの脆弱性があった場合窃取される可能性があります
自分が気を付ければ防げる話でなく、使っているライブラリの脆弱性を突かれる可能性もあり、これらに認証情報を置くことはかなり危険といえます
(ちなみにいくつかのchrome拡張のコードを見ましたが、そのままストレージに保存して使っているのもちらほらありました)


自作の拡張ではlocal storageに以下の形で保存するようにしました

key: ハッシュ化
value: 元データを、ユーザーの入力したパスワードをハッシュ化したものをキーとして暗号化


よしこれで完全に安全だな!
NO!


このロジックはjavascriptに書いてあるため、この拡張を使う全ユーザーに筒抜け
攻撃者がソースコードを見てロジックを知っていた場合、ユーザー入力のパスが割れた瞬間、認証情報がばれます


まとめ

  • chrome拡張単体で認証情報を安全に扱うのは難しい(逆に自分がtokenなどの入力を求められたときは注意)
  • google系のサービスだけを扱うなら、chrome拡張からのoauth認証をサポートしてくれているので安全にできそう
  • 現在lambdaに置き換えていくことを検討中
  • マサカリ求む

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?