CakePHP修行を読みつつ、最近僕も修行しています。
イマココ!htmlspecialcharsはhでOKらしい(CakePHP修行 #018)
で、ちょっとずつ拡張してます。
今回入れたのが、
・One time password IMproved
と名づけてみたw
というのも、元々の意味とは若干違うため。あと、完全にVim病患者なため。
One time password IMprovedのアルゴリズムは意外と簡単?
シナリオとしては、新たにSNSに入ってくる人がいた場合です。(OpenIDとかはてな認証とかMTのアレとか使いたくないとき編)
まだメール送信部分の実装はしてないので、(相手が近くにいれば手作業でもいいかと思ってるけど。)
イメージで書きますが、作業フローはこんな感じかな。
1. 管理者が仮のパスワードを発行してユーザに教えてあげる。(ここが本来のワンタイムパスワード)
2. 管理者がDBにユーザ登録のinsert文を実行。(このときはステータス”0″)
3. 新規ユーザはステータスが”0″なため、ログイン画面からちゃんと入力してもログインできない。
なので、本登録画面で、新規ユーザはもらったID,パスワードを入力して、新たに自分でパスワードを設定する。
(ここでステータスを”1″にして、ユーザのアクティベーションを行う。)
4. ログイン画面からログイン。ここで成功。
1.はまだ実装してません。最悪今のところは適当にバーっと打ってmd5でもしときゃ何かできるしw
で、3.はテーブルにステータスのフィールドを加えるのと、CakePHP修行#12のアルゴリズムにステータス比較の条件を加えるだけでできました。まぁ、当然。この辺りはちょっとセキュアな感じで自分でも気に入ってます。
ただ、ちょっと悩みが。。
実装上の悩み事
1.と2.の実装をどうしようか迷ってました。
1.はまずワンタイムパスワードの発行方法。ベーシックな感じでいくかオリジナルでいくか。
一般にオリジナルなものでは意外と単純でクラックされやすいらしいです。
かといってベーシックなものもロジックは知られているのでどうかと思います。うーむ。。
これはもうちょっと情報収集してまた次回考えます。
で、2.は運用段階で面倒だなーと思ったのです。
・ある程度の権限を持った人でないといけない&DBで直接insertしないといけない。
これだとDB弱い人がいじれないという問題が発生します。
あと、insert文いじられたら終わりorz
・また、2の処理をサボっていると2が終わる前に3が実行される可能性もあります。
これはどうやってもログインできないw
→そんなわけで、やっぱり画面がいるかー。と思ったんですが、画面バレたらユーザ作り放題やん!
→→そんなわけで、ユーザには管理者権限を持たせる必要があるわけです。
ということはログイン後の画面にそんな画面が必要なんですね。
実装しようと思うと1.、2.を同じプログラムで実行することがベターか。
