読者です 読者をやめる 読者になる 読者になる

奇特なブログ

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

自作フレームワーク修正連絡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は「禁止」されてましたし。

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