unique IP filter list

This commit is contained in:
Stefan Kalscheuer 2021-05-25 12:08:00 +02:00
parent da6cde00cf
commit 633da4086d
Signed by: stefan
GPG Key ID: 3887EC2A53B55430
2 changed files with 25 additions and 20 deletions

View File

@ -657,24 +657,28 @@ class StatifyBlacklist_Settings extends StatifyBlacklist {
* @since 1.7.0 moved from StatifyBlacklist_Admin to StatifyBlacklist_Settings. * @since 1.7.0 moved from StatifyBlacklist_Admin to StatifyBlacklist_Settings.
*/ */
private static function sanitize_ips( $ips ) { private static function sanitize_ips( $ips ) {
return array_filter( return array_values(
array_map( 'strtolower', $ips ), array_unique(
function ( $ip ) { array_filter(
return preg_match( array_map( 'strtolower', $ips ),
'/^((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])(\/([0-9]|[1-2][0-9]|3[0-2]))?$/', function ( $ip ) {
$ip return preg_match(
) || '/^((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9])(\/([0-9]|[1-2][0-9]|3[0-2]))?$/',
preg_match( $ip
'/^(([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}|([0-9a-f]{1,4}:){1,7}:|([0-9a-f]{1,4}:){1,6}:[0-9a-f]{1,4}' . ) ||
'|([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}|([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}' . preg_match(
'|([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}|([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}' . '/^(([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}|([0-9a-f]{1,4}:){1,7}:|([0-9a-f]{1,4}:){1,6}:[0-9a-f]{1,4}' .
'|[0-9a-f]{1,4}:((:[0-9a-f]{1,4}){1,6})|:((:[0-9a-f]{1,4}){1,7}|:)' . '|([0-9a-f]{1,4}:){1,5}(:[0-9a-f]{1,4}){1,2}|([0-9a-f]{1,4}:){1,4}(:[0-9a-f]{1,4}){1,3}' .
'|fe80:(:[0-9a-f]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]' . '|([0-9a-f]{1,4}:){1,3}(:[0-9a-f]{1,4}){1,4}|([0-9a-f]{1,4}:){1,2}(:[0-9a-f]{1,4}){1,5}' .
'|1?[0-9])?[0-9])|([0-9a-f]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))' . '|[0-9a-f]{1,4}:((:[0-9a-f]{1,4}){1,6})|:((:[0-9a-f]{1,4}){1,7}|:)' .
'(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/', '|fe80:(:[0-9a-f]{0,4}){0,4}%[0-9a-zA-Z]+|::(ffff(:0{1,4})?:)?((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]' .
$ip '|1?[0-9])?[0-9])|([0-9a-f]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1?[0-9])?[0-9])\.){3}(25[0-5]|(2[0-4]|1?[0-9])?[0-9]))' .
); '(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/',
} $ip
);
}
)
)
); );
} }

View File

@ -151,7 +151,7 @@ class StatifyBlacklist_Settings_Test extends PHPUnit\Framework\TestCase {
), ),
'ip' => array( 'ip' => array(
'active' => '1', 'active' => '1',
'blacklist' => "127.0.0.1/8\r\nthisisnotanip", 'blacklist' => "127.0.0.1/8\r\nthisisnotanip\r\n127.0.0.1/8",
), ),
'ua' => array( 'ua' => array(
'blacklist' => 'MyBot/1.23', 'blacklist' => 'MyBot/1.23',
@ -240,6 +240,7 @@ class StatifyBlacklist_Settings_Test extends PHPUnit\Framework\TestCase {
'2001:db8:a0b:12f0::1/128', '2001:db8:a0b:12f0::1/128',
'2001:DB8:A0B:12F0::/64', '2001:DB8:A0B:12F0::/64',
'fe80::7645:6de2:ff:1', 'fe80::7645:6de2:ff:1',
'2001:db8:a0b:12f0::',
'::ffff:192.0.2.123', '::ffff:192.0.2.123',
); );
$invalid = array( $invalid = array(
@ -266,7 +267,7 @@ class StatifyBlacklist_Settings_Test extends PHPUnit\Framework\TestCase {
'fe80::7645:6de2:ff:1', 'fe80::7645:6de2:ff:1',
'::ffff:192.0.2.123', '::ffff:192.0.2.123',
), ),
array_values( $result ) $result
); );
} }