correctly validate IPv6 and IPv4
This commit is contained in:
parent
003f4b8e73
commit
6c429af1ea
@ -314,6 +314,44 @@ if (!function_exists('fnmatch')) {
|
|||||||
return mail($fp_config['general']['email'], $subject, $message, $headers);
|
return mail($fp_config['general']['email'], $subject, $message, $headers);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* props: http://crisp.tweakblogs.net/blog/2031
|
||||||
|
*/
|
||||||
|
function utils_validateIPv4($IP) {
|
||||||
|
return $IP == long2ip(ip2long($IP));
|
||||||
|
}
|
||||||
|
|
||||||
|
function utils_validateIPv6($IP) {
|
||||||
|
// fast exit for localhost
|
||||||
|
if (strlen($IP) < 3)
|
||||||
|
return $IP == '::';
|
||||||
|
|
||||||
|
// Check if part is in IPv4 format
|
||||||
|
if (strpos($IP, '.'))
|
||||||
|
{
|
||||||
|
$lastcolon = strrpos($IP, ':');
|
||||||
|
if (!($lastcolon && validateIPv4(substr($IP, $lastcolon + 1))))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// replace IPv4 part with dummy
|
||||||
|
$IP = substr($IP, 0, $lastcolon) . ':0:0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// check uncompressed
|
||||||
|
if (strpos($IP, '::') === false)
|
||||||
|
{
|
||||||
|
return preg_match('/^(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}$/i', $IP);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check colon-count for compressed format
|
||||||
|
if (substr_count($IP, ':') < 8)
|
||||||
|
{
|
||||||
|
return preg_match('/^(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?$/i', $IP);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// get client IP
|
// get client IP
|
||||||
function utils_ipget() {
|
function utils_ipget() {
|
||||||
|
|
||||||
@ -338,7 +376,7 @@ if (!function_exists('fnmatch')) {
|
|||||||
$ip = getenv( "REMOTE_ADDR" );
|
$ip = getenv( "REMOTE_ADDR" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $ip)) {
|
if (utils_validateIPv4($ip) || utils_validateIPv6($ip)) {
|
||||||
return $ip;
|
return $ip;
|
||||||
} else {
|
} else {
|
||||||
return '';
|
return '';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user