11 Commits

Author SHA1 Message Date
2ea3d66677 prepare release 1.6.2 2023-02-25 14:29:41 +01:00
7ae0ffcb94 ci: add PHP 8.2 to test matrix 2023-02-25 14:18:55 +01:00
a533a494fa remove deprecated FILTER_SANITIZE_STRING usage 2023-02-25 14:17:24 +01:00
7ffc8074b4 restrict PHPUnit to v5-v9
PHPUnit 10 fails with old configuration schema while older releases only
print a warning.

Stick with at most v9 for now, as we are testing against older PHP
versions that to not support the new scheme.
2023-02-25 14:16:57 +01:00
8267e408f0 simply regex quantifiers and parse IPs to lowercase
Use ? instead of {0,1} and {3} instead of {3,3} where applicable.
Number groups [ß-9] are left as is for readability, i.e. prefer
[1-9][0-9] over [1-9]\d.

The whole expression is evaluated case-insensitive now, so we can omit
the "a-fA-F" and simply use "a-f".

Unit-tests extended accordingly.
2022-11-04 10:42:36 +01:00
10cc310e48 declare compatibility with WordPress 6.1 2022-11-04 10:09:10 +01:00
91fff8a32c declare compatibility with WordPress 6.0 2022-05-28 09:48:58 +02:00
7104188718 ci: update dev-dependencies and actions 2022-05-14 18:35:48 +02:00
e0a6b498af ci: add PHP 8.1 to test roster 2022-01-26 17:56:11 +01:00
e449fe02b0 declare compatibility with WordPress 5.9 2022-01-26 17:53:06 +01:00
24c32327aa declare compatibility with WordPress 5.8 2021-08-01 16:13:58 +02:00
11 changed files with 58 additions and 21 deletions

View File

@ -5,10 +5,10 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy: strategy:
matrix: matrix:
php: [ '5.6', '7.3', '7.4', '8.0' ] php: [ '5.6', '7.4', '8.0', '8.1', '8.2' ]
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v3
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Setup PHP - name: Setup PHP
@ -42,7 +42,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v2 uses: actions/checkout@v3
- name: Setup PHP - name: Setup PHP
uses: shivammathur/setup-php@v2 uses: shivammathur/setup-php@v2
with: with:

View File

@ -8,7 +8,7 @@ jobs:
name: Push to stable name: Push to stable
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Clean README.md - name: Clean README.md
run: tail -n +6 README.md > README.md.tmp && mv README.md.tmp README.md run: tail -n +6 README.md > README.md.tmp && mv README.md.tmp README.md
- name: WordPress.org plugin asset/readme update - name: WordPress.org plugin asset/readme update

View File

@ -9,7 +9,7 @@ jobs:
name: New tag name: New tag
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v3
- name: Clean README.md - name: Clean README.md
run: tail -n +6 README.md > README.md.tmp && mv README.md.tmp README.md run: tail -n +6 README.md > README.md.tmp && mv README.md.tmp README.md
- name: WordPress Plugin Deploy - name: WordPress Plugin Deploy

View File

@ -6,14 +6,14 @@
# Statify Filter # # Statify Filter #
* Contributors: Stefan Kalscheuer * Contributors: Stefan Kalscheuer
* Requires at least: 4.7 * Requires at least: 4.7
* Tested up to: 5.7 * Tested up to: 6.1
* Requires PHP: 5.5 * Requires PHP: 5.5
* Stable tag: 1.6.1 * Stable tag: 1.6.2
* License: GPLv2 or later * License: GPLv2 or later
* License URI: https://www.gnu.org/licenses/gpl-2.0.html * License URI: https://www.gnu.org/licenses/gpl-2.0.html
## Description ## ## Description ##
A filter extension for the famous [Statify](https://wordpress.org/plugins/statify/) Wordpress plugin. A filter extension for the famous [Statify](https://wordpress.org/plugins/statify/) WordPress plugin.
This plugin adds customizable filters to Statify to allow blocking of referer spam or internal interactions. This plugin adds customizable filters to Statify to allow blocking of referer spam or internal interactions.
@ -93,6 +93,9 @@ Same for IPv6 prefixes like _2001:db8:a0b:12f0::/64_.
## Upgrade Notice ## ## Upgrade Notice ##
### 1.6.2 ###
This is a service release with minor internal corrections and PHP 8.2 compatibility.
### 1.6.1 ### ### 1.6.1 ###
This is a bugfix release that corrects storage and evaluation of the user agent filter list. This is a bugfix release that corrects storage and evaluation of the user agent filter list.
@ -106,6 +109,11 @@ This version should be compatible with latest WordPress 5.6.
## Changelog ## ## Changelog ##
### 1.6.2 / 25.02.2023 ###
* Always process IPv6 addresses lowercase
* Optimize internally used regular expression
* Minor adjustments to prevent warnings during user agent filtering with PHP 8.2
### 1.6.1 / 28.05.2021 ### ### 1.6.1 / 28.05.2021 ###
* Fix storage of user agent filter list (#28, props @BananaSquishee) * Fix storage of user agent filter list (#28, props @BananaSquishee)

View File

@ -1,6 +1,6 @@
{ {
"name": "stklcode/statify-blacklist", "name": "stklcode/statify-blacklist",
"version": "1.6.1", "version": "1.6.2",
"description": "A filter extension for the famous Statify WordPress plugin", "description": "A filter extension for the famous Statify WordPress plugin",
"keywords": [ "keywords": [
"wordpress", "wordpress",
@ -19,14 +19,14 @@
"type": "wordpress-plugin", "type": "wordpress-plugin",
"require": { "require": {
"php": ">=5.5", "php": ">=5.5",
"composer/installers": "~1.11" "composer/installers": "~1.12"
}, },
"require-dev": { "require-dev": {
"dealerdirect/phpcodesniffer-composer-installer": "^0.7", "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
"phpunit/phpunit": "*", "phpunit/phpunit": "^5|^6|^7|^8|^9",
"phpunit/php-code-coverage": "*", "phpunit/php-code-coverage": "*",
"slowprog/composer-copy-file": "~0.3", "slowprog/composer-copy-file": "~0.3",
"squizlabs/php_codesniffer": "^3.6", "squizlabs/php_codesniffer": "^3.7",
"phpcompatibility/phpcompatibility-wp": "^2.1", "phpcompatibility/phpcompatibility-wp": "^2.1",
"wp-coding-standards/wpcs": "^2.3" "wp-coding-standards/wpcs": "^2.3"
}, },
@ -44,5 +44,11 @@
"fix-cs": [ "fix-cs": [
"phpcbf --standard=phpcs.xml" "phpcbf --standard=phpcs.xml"
] ]
},
"config": {
"allow-plugins": {
"composer/installers": true,
"dealerdirect/phpcodesniffer-composer-installer": true
}
} }
} }

View File

@ -329,14 +329,20 @@ class StatifyBlacklist_Admin extends StatifyBlacklist {
*/ */
private static function sanitize_ips( $ips ) { private static function sanitize_ips( $ips ) {
return array_filter( return array_filter(
$ips, array_map( 'strtolower', $ips ),
function ( $ip ) { function ( $ip ) {
return preg_match( return preg_match(
'/^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])(\/([0-9]|[1-2][0-9]|3[0-2]))?$/', '/^((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]))?$/',
$ip $ip
) || ) ||
preg_match( preg_match(
'/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))(\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8]))?$/', '/^(([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}' .
'|([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}:((:[0-9a-f]{1,4}){1,6})|:((:[0-9a-f]{1,4}){1,7}|:)' .
'|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]' .
'|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]))?$/i',
$ip $ip
); );
} }

View File

@ -388,7 +388,7 @@ class StatifyBlacklist {
*/ */
private static function get_user_agent() { private static function get_user_agent() {
if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) { if ( ! empty( $_SERVER['HTTP_USER_AGENT'] ) ) {
$user_agent = filter_var( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ), FILTER_SANITIZE_STRING ); $user_agent = filter_var( wp_unslash( $_SERVER['HTTP_USER_AGENT'] ) );
if ( $user_agent ) { if ( $user_agent ) {
return $user_agent; return $user_agent;
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "statify-blacklist", "name": "statify-blacklist",
"version": "1.6.1", "version": "1.6.2",
"description": "A filter extension for the famous Statify WordPress plugin", "description": "A filter extension for the famous Statify WordPress plugin",
"author": "Stefan Kalscheuer", "author": "Stefan Kalscheuer",
"license": "GPL-2.0+" "license": "GPL-2.0+"

View File

@ -10,7 +10,7 @@
* Plugin Name: Statify Filter * Plugin Name: Statify Filter
* Plugin URI: https://wordpress.org/plugins/statify-blacklist/ * Plugin URI: https://wordpress.org/plugins/statify-blacklist/
* Description: Extension for the Statify plugin to add customizable filters. (formerly "Statify Blacklist) * Description: Extension for the Statify plugin to add customizable filters. (formerly "Statify Blacklist)
* Version: 1.6.1 * Version: 1.6.2
* Author: Stefan Kalscheuer (@stklcode) * Author: Stefan Kalscheuer (@stklcode)
* Author URI: https://www.stklcode.de * Author URI: https://www.stklcode.de
* Text Domain: statify-blacklist * Text Domain: statify-blacklist

View File

@ -43,14 +43,17 @@ class StatifyBlacklist_Admin_Test extends PHPUnit\Framework\TestCase {
'2001:db8:a0b:12f0::', '2001:db8:a0b:12f0::',
'2001:db8:a0b:12f0::1', '2001:db8:a0b:12f0::1',
'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',
'::ffff:192.0.2.123',
); );
$invalid = array( $invalid = array(
'2001:db8:a0b:12f0::x', '2001:db8:a0b:12f0::x',
'2001:db8:a0b:12f0:::', '2001:db8:a0b:12f0:::',
'2001:fffff:a0b:12f0::1', '2001:fffff:a0b:12f0::1',
'2001:db8:a0b:12f0::/129', '2001:DB8:A0B:12F0::/129',
'1:2:3:4:5:6:7:8:9', '1:2:3:4:5:6:7:8:9',
'::ffff:12.34.56.789',
); );
$result = invoke_static( StatifyBlacklist_Admin::class, 'sanitize_ips', array( array_merge( $valid, $invalid ) ) ); $result = invoke_static( StatifyBlacklist_Admin::class, 'sanitize_ips', array( array_merge( $valid, $invalid ) ) );
$this->assertNotFalse( $result ); $this->assertNotFalse( $result );
@ -59,6 +62,6 @@ class StatifyBlacklist_Admin_Test extends PHPUnit\Framework\TestCase {
} else { } else {
$this->assertInternalType( 'array', $result ); $this->assertInternalType( 'array', $result );
} }
$this->assertEquals( $valid, $result ); $this->assertEquals( array_map( 'strtolower', $valid ), $result );
} }
} }

View File

@ -283,6 +283,20 @@ class StatifyBlacklist_Test extends PHPUnit\Framework\TestCase {
array( '2001:db8:a0b:12f0::123:456', '2001:db8:a0b:12f0::1/96 ' ) array( '2001:db8:a0b:12f0::123:456', '2001:db8:a0b:12f0::1/96 ' )
) )
); );
$this->assertTrue(
invoke_static(
StatifyBlacklist::class,
'cidr_match',
array( '2001:DB8:A0B:12F0::123:456', '2001:db8:a0b:12f0::1/96 ' )
)
);
$this->assertTrue(
invoke_static(
StatifyBlacklist::class,
'cidr_match',
array( '2001:db8:a0b:12f0::123:456', '2001:DB8:A0B:12F0::1/96 ' )
)
);
$this->assertFalse( $this->assertFalse(
invoke_static( invoke_static(
StatifyBlacklist::class, StatifyBlacklist::class,