奇特なブログ

「殊勝に値する行いや心掛け」を意味する、奇特な人になる為のブログです

自作フレームワーク修正連絡Part1

本ブログに掲載されている、
筆者の自作フレームワークの改修を行いました。
本エントリでは、主な修正点を書きたいと思います。
修正に際して、いわゆる徳丸本が大変参考になりました。
著者の徳丸先生には、深くお礼を申し上げたいと思います。
それにしても助かったw

・セッションIDを変更するタイミングの見直し

セッションIDの変更を、
「ログインに成功した直後(フレームワーク上の処理では行っていませんが)」と、
「ログイン後、5分経過する毎」にのみ行う様にしました。
これまでは、HTTPリクエストをする毎に、
ログイン状態に関係なく変更を行っていましたが、
サーバーへの負荷にもなるとの事で、変更しました。
この修正が反映されているクラスは、controller.phpになります。

・パスワードの生成処理を見直し

「ユーザーIDに16進数バイナリ文字列化されたソルトを連結後、
任意のストレッチング回数分、パスワードと連結してsha256でハッシュ化する」処理に変更しました。
これまでは、パスワードと適当に決めたソルトを連結して、
「1回だけ」sha512でハッシュ化する実装でした。
この修正が反映されているクラスは、utility.phpになります。
ただし、上記の処理を行っているメソッドはutilityクラスに書くべきではないと思っているので、
今後、別のクラス(多分、認証系のクラス)に移動する予定です。

CSRF対策処理の見直し

csrf.phpというクラスを新規作成し、
そのクラス内に対策処理を書くようにしました。
また、以下はフレームワーク上には書いていない処理ですが。
「入力→確認→完了」の遷移をする機能があって且つ、
重要な処理を行う(メアドやパスワードの変更など)場合には、
確認画面を表示する直前に、確認画面内のhiddenにトークン(セッションID)を保存し、
完了画面へのリクエストの直後にトークンの値をチェックする処理にしました。

・マルチバイト対応関数への変更

どのクラスというか「全体的」になんですが、mb系の関数を使う様に変更しました。
ただ、mb_str_replaceという関数は、
PHPの標準関数「では」存在しないようなので、
str_replaceのままになっている箇所もあります。

SQL文中の「?」を「$数字」に置換する処理の変更

セキュリティには全く関係は無いのですが、
utility.php内の、「sql_param_question_to_dollar_num」メソッドの実装を「シンプルに」しました。
これは、脆弱性と関係がないので、参考程度に修正前のソースも掲載しておきます。

他にもまあ、色々とあるのですが、
基本的には徳丸本の4・5・6章の内容を全て再読しながら見直しを行いました。

・今後の予定

自分でも良く分からないのですがw
とりあえず、筆者の頭の中でパッと浮かんだネタを適当に書いてみます。

1.認証系のクラスを作成する
2.configクラスがシングルトンになっているが、脱シングルトンにする(少し答えが見えてきた)
3.actionとviewを一つにまとめるかも?(脱シングルトンと関係あり)
4.携帯対応(画面表示時にShift_JISに変換したりなど)
5.SQLインジェクション対策の処理を自作する(知人はそうしているので)
6.PHPのセッション関数群を使わずに、自作でセッション管理を行う

とはいえ、やるかどうかは分かりません。
特に5・6は、脆弱性になる可能性も高いので。
徳丸本でも6は「禁止」されてましたし。

と、そんな感じで、本エントリを締めたいと思います。
ココのソースが危ない!とかダメ!とかがあれば、
コメント等で連絡頂ければと思います。