web-dev-qa-db-ja.com

IPアドレスをフィルタリングする

ユーザーIPを取得するために次のように記述しました。

private function getIpAddress()
{
    $server = JFactory::getApplication()->input->server;

    if (!empty($server->get('HTTP_CLIENT_IP')))
    {
        $ip = $server->get('HTTP_CLIENT_IP');
    }
    else if (!empty($server->get('HTTP_X_FORWARDED_FOR')))
    {
        $ip = $server->get('HTTP_X_FORWARDED_FOR');
    }
    else
    {
        $ip = $server->get('REMOTE_ADDR');
    }

    return $ip;
}

JFilterInput-> clean() アプローチを使用して、'STRING''INT'などの使用可能なオプションの1つを使用して、値をフィルタリングしたいと思います。

私はINTを調べましたが、これで次の正規表現を持つIPが許可されるとは思われません。

$pattern = '/[-+]?[0-9]+/';

.(ドット)を受け入れないため。


次にCMDを確認し、.(dot)を許可しているので、これが使用に最適かどうか疑問に思いました。

$pattern = '/[^A-Z0-9_\.-]/i';

CMDを使用するのが最善でしょうか?そうでない場合、どれですか?または、ネイティブのPHPフィルターのいずれかを使用するのが最善でしょうか?

2
Lodder

とりあえず、PHPネイティブfilter_var とともに FILTER_VALIDATE_IPフィルター、次のように:

return filter_var($ip, FILTER_VALIDATE_IP);

もちろん私はまだ他の提案を受け入れています

2
Lodder