Mantisの今日この頃
最近のMantisはリリースミスというかリリース後に痛いバグが見つかっています。
そもそもの発端は、CSRF Vulnerabilities in user_createの対処でPHPのセッションを使用したトークンの実装にあります。
この仕組みを簡単に言うと、
- ユニークなトークン(文字列)を生成する。
- セッションにトークン(A)を保存する。
- 登録画面にトークン(B)を埋め込む。
- 登録を実行する
- クライアントのリクエストから取得したトークン(A)と、セッションのトークン(B)が違う場合エラーと判断する。
といったようなもので、2度押しやCSRFの対策になりますが、
- 1.1.2
- PHPのセッションを開始するとクライアントに送るヘッダが変わって、登録画面がキャッシュされなくなり、戻るボタンで戻っても入力値が消えている。Browser caching broken since 1.1.2
- ログアウトしても、セッションがクリアされない。ogout without unsetting session cookie
- 1.1.3
- 1.1.XはPHP4対応なのに、PHP5からサポートされた引数を使用している。Wrong parameter count for session_set_cookie_params()
- 登録画面にトークンが埋め込まれていないので、登録できない。Failed to report issue.(Always APPLICATION ERROR #2800)
- 1.1.4
- ユーザー登録やパスワードのリセットを行うと2度押しエラーになる。Users are unable to confirm registration
といったバグが短期間に登録されました。特に1.1.4はリリースアナウンスがあって数時間で取り消されました。
PHPに限らずセッションの管理は難しいものですので、十分な試験が必要です。Hudsonとかで自動試験の仕組みをつくるのも対策にはなりますが、なかなか単体の試験を行うような構成にはなっていないので導入は難しそうです。というよりも、エラーがあったら”戻るボタン”で戻るという仕様もどうかと...
ちなみに、1.1.5として現在修正が進んでいますが、先ほどバグを見つけたので先は長そうです。