安全になった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を優先するようです。