安全になったRequestHandler->getClientIP()

RequestHandler->getClientIP()の事を調べていたら、RequestHandler->getClientIP()が返す結果は信用できないという記事を見つけました。


CakePHPのgetClientIPを使っていいのは小学生までだよねー


簡単に言うと、HTTP_X_FORWARDED_FORは簡単に偽装できるのに、HTTP_X_FORWARDED_FORに値が設定してあるとその値を返してしまうらしいです。
現在の最新版であるCakePHP 1.2.5ではどうなったかというと、対応されています。

        function getClientIP($safe = true) {
                if (!$safe && env('HTTP_X_FORWARDED_FOR') != null) {
                        $ipaddr = preg_replace('/(?:,.*)/', '', env('HTTP_X_FORWARDED_FOR'));
                } else {
                        if (env('HTTP_CLIENT_IP') != null) {
                                $ipaddr = env('HTTP_CLIENT_IP');
                        } else {
                                $ipaddr = env('REMOTE_ADDR');
                        }
                }

デフォルトの動作ではHTTP_X_FORWARDED_FORを無視し、引数としてFALSEを渡すと、従来通りHTTP_X_FORWARDED_FORを優先するようです。