2007-06-25 エリス―その1―
「エリス(ELIS)」は現在,私が手がけている商品の開発名です。2007年8月の完成を目指しています。
エリスは個人向けのWebサービスです。エリスの肝は利用者管理です。「利用者がログインして何らかの処理後,ログアウトする」といった認証処理を含みます。私,今まで「ログインとログアウト」という仕掛けを手がけた経験がありません。あれこれ下調べに奔走しているのです。
認証と承認
よく「認証」であるとか「承認」という言葉を耳にします。どちらも似たような意味に感じていたのですが,だからといってどちらもはっきりとした意味を把握しておりませんでした。ここで整理しておきましょう。
- 認証 ― ユーザ名,パスワードの整合性を確認する処理
- 承認 ― アクセス権のこと。認証された利用者に許されている操作を特定して,制限を課する処理
エリスでは「承認」はありません。「管理者」「ユーザ」「ゲスト」という区別は存在しないわけです。あえていうなら,すべての利用者はユーザ権限です。
セキュリティ
「セキュリティ(<英>security)」とは,何でしょうか。ヨコ文字にしてしまうと意味が曖昧になってしまうのですが,ここでのセキュリティとは「あらかじめ決めたパスワードを知っている利用者だけが,サービスを使うことができる性質」とします。
実生活で喩えれば,鍵を掛ける行為と一致します。鍵にはいろんな種類があります。銀行の地下金庫からオートロックのマンション,物置の南京錠など,頼りになりそうな鍵から頼りない鍵まであるわけです。地下金庫と南京錠とでは,目指している安全性がまったく違うわけですが,インターネットの世界ではひと括りに「セキュリティ」と言ってしまっている気がします。(ゆえに話が噛み合っていない事例があるように感じます。)
エリスが目指すセキュリティは「南京錠型」です。強力な道具を使われると,壊されてしまう危険があります。しかし鍵の性能は,守らなければならないものの価値に見合ってさえいれば良いはずです。
現在,決まっていることを箇条書きにします。
- 通信経路のプロトコルはHTTPとする。SSLは使わない(技術的な問題もありますが,デジタル署名は高額すぎる。それに法人でなければ取得できなかったような)
- セッション管理にはCOOKIEを使う
- 利用者のパスワードにはダイジェスト値(SHA-1)を使う。サーバホストにてパスワードの平文(生のパスワード文字列)は保存しない
Perl-Catalystによる認証
認証とCOOKIEを使ったセッション管理は,既存のフレームワーク(Catalyst-Plugin-Authenticationモジュール)で実装する予定です。すでにフレームワークの動作検証は済んでいます。
しかしながら,罠がありそうなのです。フレームワークって作者が想定したとおり(もっとはっきり言えばサンプルプログラムどおり)に使っているのなら,何の問題もなく動くことが多いのですが,ちょっと凝ったことをしようとするとたちまち機能不全に陥ることがあります。そもそもフレームワークの範囲内では,実現が不可能な動作も存在するのです。
気にしていることを挙げておきます。
- 認証漏れ ― 認証後でなければ出力してはならないページが,何らかの原因で出力されてしまう現象。原理上,認証漏れが発生しないようにしなければならない
- 同時アクセス ― 同じ利用者(と名乗る利用者)が同一ホストあるいは複数ホスト,複数ブラウザから同時にログインして利用した場合の挙動。内部データはDBで同期を取っているので,深刻な問題は起こらない「はず」だが
- 過渡状態 ― 設計不良あるいはサーバホストの負荷が高く,状態遷移が正常であるにも関わらず,利用者からすると不具合に感じる場合(おもに表示不正)。マズイことが起きたら「ただいま混雑しております」を出力して利用者を制限できるようにしたい。思惑どおり「マズイこと」を検出できたらの話ですが(ふめい)