web-dev-qa-db-ja.com

WebブラウザーのLocalStorageは、パスワードを保存するのに十分安全ですか?

ユーザーがログインページにメールアドレスとパスワードを入力できるシステムを構築しています。ユーザーがそれを行った後でサインアップボタンをクリックすると、ユーザーをサインアップページにリダイレクトする前に、そのデータがLocalStorageに保存されます。

次に、サインアップページはLocalStorageをチェックし、前のページからの電子メールとパスワードを自動入力します。

私の質問は、LocalStorageはそのタイプのデータを格納するのにどの程度安全ですか?この方法でRAWパスワードを保存することは悪い考えのようです。そうは言っても、それはすべてユーザーのデバイス上でローカルです。どのサーバーにも何も送信されないため、攻撃の可能性が低くなります。

また、サインアップページでアイテムを取得した後、LocalStorageからアイテムを削除することも検討しました。それはそれをより安全にします。

RAWパスワードとこのタイプのデータを保存するためのLocalStorageはどの程度安全ですか?

1
Charlie Fish

ひどい考え。クライアント上やサーバー上ではなく、ページ間でパスワードをクリアテキストで保存しないでください。ページフローを再設計します(たとえば、最初のログインページでユーザー名を入力し、それが存在しない場合は登録ページに分岐します)。それができない場合は、パスワードを再入力してもらいます。

3
Brezelbub

次の理由により、LocalStorageにパスワードを保存しないでください:

  • LocalStorageのコンテンツは、削除しない限り永久に残ります。ユーザーがログインボタンをクリックして、サインアップせずにウィンドウを閉じると、パスワードはLocalStorageから削除されません。
  • 平文でパスワードを保存することは、一般的に悪い考えです。プレーンテキスト(LocalStorage、SessionStorage、Server)の場合は、どこに保存してもかまいません。

問題の可能な解決策:

  • ユーザーがログインボタンをクリックすると、サーバーでパスワードを直接ハッシュ(+ salt)してユーザーのセッションに保存できます(セッションデータはサーバーに保存されます)。次に、ユーザーがサインアップフォームを送信するときに、ハッシュされたパスワードとソルトをデータベースに保存する必要があります。この解決策は技術的な観点からは可能ですが、一般的ではないため、ユーザビリティの観点からは非常に奇妙なので、回避する必要があります。

  • Brezelbubが述べたように、「Googleログイン」フローを使用できます。

    • ユーザーがメールアドレスを入力します
    • メールアドレスがまだ登録されていない場合は、サインアップページにリダイレクトし、メールを自動入力します。それ以外の場合は、メールフィールドが事前に入力されたログインページを表示します。
  • ログインフォームの下に登録ボタン/リンクを表示します。これが最も一般的な方法です。

この回答が、使いやすく安全なログイン/サインアップ設計を選択するのに役立つことを願っています。

1
nebulak