プログラミング 美徳の不幸

Ruby, Rails, JavaScriptなどのプログラミングまとめ、解説、備忘録。

簡潔かつセキュアなログインフォーム

ログインフォームは一般的に「メール」「パスワード」の組み合わせをSSLで送受信して適当にセッションを付与するのが基本なのだろうけど、以下のような問題点がある。

スマホ時代にパスワード入力は鬱陶しい

最大のポイント。一般論として英数字記号などが適度に含まれててある程度の長さを持っているパスワードのほうが安全だけど、スマホはキーボード切り替えが面倒なのでそんなパスワードを設定してもらうのを期待するのは厳しいのでは。

どうせ使い回すのでユーザのパスワードが他サービスから漏れたら不正アクセスされる

「ぱす」とかで入力候補に使い回しパスワードが出るようにしてる人もいるし、「他サービスから漏れたのが原因だからうちのサービスで被害が出たのはこっちの責任じゃない」というのは法的には成立しても親切ではない。

復旧手段が脆弱

パスワードを忘れた場合、メールアドレス宛に再発行URLを送るのが一般的実装だけど、メールは盗聴可能であるという前提を持つと再発行URLは脆弱。このあたりはいろんなサイトで判断が分かれてるところだけど、再発行URLからさらに秘密の質問的なものを踏ませないと安全ではない。それもどこまで効果があるか疑問。 だいいち秘密の質問にまともに回答してますか? 僕「test」とか適当に入れてるけど。

というわけで対抗策をいくつか考えてみた。

セッションを破棄せず一つのブラウザでしか使わせない

ログイン・ログアウトの概念をなくす。個人のスマホでサービスが使われるという前提があるならわりと安全だと思う。ブラウザをまたぎたい場合は最初に使ったブラウザからソーシャルアカウントと連携させる。

まぁソーシャル連携は案外敷居が高いので、クロスブラウザでは使えないサービスになるけど。

批判

セッションを破棄しないのは危険。なぜなら個人の端末で使われるとは限らないため。またシークレットモードとかの扱いも面倒(シークレットモードで使ってもらうと困るから)だし、そもそもクッキー消されたら一生ログインできなくなっちゃう。

SMS

メール・パスワードの組み合わせではなく電話番号・ワンタイムパスワードにする。 SMSって盗聴されるんですかね?(ちょっとよくわかってない) これならパスワードいらないし、別メール飛ばすよりもiPhoneだと上からぴょっと出るからけっこう楽だと思うけど。

批判

SMSが届く電話番号がないとサービスが使えない=PCのユーザビリティ低下+MVNOでSMS使えないケースもある。 またSMS実装はコストがかかる。

個人的にはこれLINEに送れるといいと思う。そのままLINEで問い合わせ対応できるようにとか・・・。ないのかな?

安全かつシンプルがいいとも限らない

ただ、最大の問題はユーザが電話番号ログインとかワンタイムパスワード慣れしてないので、いま「電話番号だけでログインできます」というサービスを作っても付いてこれない気がする。