PluginProbe
Patchstack – WordPress & Plugins Security / 2.2.1
Patchstack – WordPress & Plugins Security v2.2.1
2.3.7 trunk 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.16 2.1.17 2.1.18 2.1.19 2.1.2 2.1.20 2.1.21 2.1.22 2.1.23 2.1.24 2.1.25 2.1.3 2.1.4 2.1.5 2.1.6 All 49 releases
← All changes | patchstack.php +16 -23 2.1.252.2.1 View file →
@@ -1,10 +1,11 @@
1 1 <?php
2 2 /**
3 3 * Plugin Name: Patchstack Security
4 - * Plugin URI: https://patchstack.com
4 + * Plugin URI: https://patchstack.com/?utm_medium=wp&utm_source=dashboard&utm_campaign=patchstack%20plugin
5 + * Author URI: https://patchstack.com/?utm_medium=wp&utm_source=dashboard&utm_campaign=patchstack%20plugin
5 6 * Description: Patchstack identifies security vulnerabilities in WordPress plugins, themes, and core.
6 - * Version: 2.1.25
7 + * Version: 2.2.1
7 8 * Author: Patchstack
8 9 * License: GPLv3
9 10 * Text Domain: patchstack
10 11 * Domain Path: /languages
@@ -32,9 +33,9 @@
32 33
33 34 // Set up our filename.
34 35 $file_name = strtolower( str_replace( '_', '-', substr( $class_name, strlen( 'P_' ) ) ) );
35 36 $dir = trailingslashit( dirname( __FILE__ ) ) . 'includes/';
36 - $target = array( $dir . $file_name . '.php', $dir . 'admin/' . str_replace( 'admin-', '', $file_name ) . '.php' );
37 + $target = [ $dir . $file_name . '.php', $dir . 'admin/' . str_replace( 'admin-', '', $file_name ) . '.php' ];
37 38
38 39 // Attempt each target and load if it exists.
39 40 foreach ( $target as $file ) {
40 41 if ( file_exists( $file ) ) {
@@ -57,9 +58,9 @@
57 58 * The plugin version.
58 59 *
59 60 * @var string
60 61 */
61 - const VERSION = '2.1.25';
62 + const VERSION = '2.2.1';
62 63
63 64 /**
64 65 * API URL of Patchstack to communicate with.
65 66 *
@@ -113,9 +114,9 @@
113 114 * Detailed activation error messages.
114 115 *
115 116 * @var array
116 117 */
117 - protected $activation_errors = array();
118 + protected $activation_errors = [];
118 119
119 120 /**
120 121 * Singleton instance of plugin.
121 122 *
@@ -183,9 +184,9 @@
183 184 * @return void
184 185 */
185 186 public function plugin_classes() {
186 187 // Define the array of the classes.
187 - foreach ( array(
188 + foreach ( [
188 189 'admin_options' => 'P_Admin_Options',
189 190 'cron' => 'P_Cron',
190 191 'api' => 'P_Api',
191 192 'login' => 'P_Login',
@@ -203,12 +204,13 @@
203 204 'notice' => 'P_Cookie_Notice',
204 205 'admin_ajax' => 'P_Admin_Ajax',
205 206 'admin_general' => 'P_Admin_General',
206 207 'admin_menu' => 'P_Admin_Menu',
207 - ) as $var => $class ) {
208 + ] as $var => $class ) {
208 209 $this->$var = new $class( $this );
209 210 }
210 211
212 + // Load firewall base functionality.
211 213 $this->firewall_base = new P_Firewall( true, $this, true );
212 214 }
213 215
214 216 /**
@@ -262,21 +264,12 @@
262 264 $this->activation->deactivate();
263 265 }
264 266
265 267 /**
266 - * Boot Patchstack and its classes.
268 + * Boot Patchstack.
267 269 *
268 270 * @return void
269 271 */
270 - public function hooks() {
271 - add_action( 'init', array( $this, 'init' ), ~PHP_INT_MAX );
272 - }
273 -
274 - /**
275 - * Boot Patchstack
276 - *
277 - * @return void
278 - */
279 272 public function init() {
280 273 // Load translated strings for plugin.
281 274 load_plugin_textdomain( 'patchstack', false, dirname( $this->basename ) . '/languages/' );
282 275
@@ -290,9 +283,9 @@
290 283 if ( get_option( 'patchstack_api_token', '' ) == '' && get_option( 'patchstack_license_expiry', '' ) == '' ) {
291 284 $this->api->update_license_status();
292 285 }
293 286
294 - // Determine if the license is activated and not expired.
287 + // Run firewall if not disabled and license activated.
295 288 if ( get_option( 'patchstack_license_activated', 0 ) == 1 && get_option( 'patchstack_basic_firewall', 0 ) == 1 && get_option( 'patchstack_license_free', 0 ) == 0 ) {
296 289 $this->firewall = new P_Firewall( true, $this );
297 290 }
298 291 }
@@ -347,9 +340,9 @@
347 340 * @return void
348 341 */
349 342 function patchstack_uninstall() {
350 343 // Delete most of the Patchstack options.
351 - $options = array( 'patchstack_eventlog_lastid', 'patchstack_api_token', 'patchstack_dashboardlock', 'patchstack_pluginedit', 'patchstack_move_logs', 'patchstack_userenum', 'patchstack_basicscanblock', 'patchstack_hidewpcontent', 'patchstack_hidewpversionk', 'patchstack_prevent_default_file_access', 'patchstack_basic_firewall', 'patchstack_known_blacklist', 'patchstack_block_debug_log_access', 'patchstack_block_fake_bots', 'patchstack_index_views', 'patchstack_proxy_comment_posting', 'patchstack_bad_query_strings', 'patchstack_advanced_character_string_filter', 'patchstack_advanced_blacklist_firewall', 'patchstack_forbid_rfi', 'patchstack_image_hotlinking', 'patchstack_add_security_headers', 'patchstack_firewall_log_lastid', 'patchstack_user_log_lastid', 'patchstack_captcha_public_key', 'patchstack_captcha_private_key', 'patchstack_scan_interval', 'patchstack_scan_day', 'patchstack_scan_time', 'patchstack_hackers_log', 'patchstack_users_log', 'patchstack_visitors_log', 'external_updates-webarx', 'patchstack_wp_stats', 'patchstack_captcha_login_form', 'patchstack_license_activated', 'patchstack_license_expiry', 'patchstack_software_data_hash', 'patchstack_mv_wp_login', 'patchstack_rename_wp_login', 'patchstack_googledrive_backup_is_running', 'patchstack_googledrive_upload_state', 'patchstack_googledrive_access_token', 'patchstack_googledrive_refresh_token', 'patchstack_cron_offset', 'patchstack_htaccess_rules_hash' );
344 + $options = [ 'patchstack_eventlog_lastid', 'patchstack_api_token', 'patchstack_dashboardlock', 'patchstack_pluginedit', 'patchstack_move_logs', 'patchstack_userenum', 'patchstack_basicscanblock', 'patchstack_hidewpcontent', 'patchstack_hidewpversionk', 'patchstack_prevent_default_file_access', 'patchstack_basic_firewall', 'patchstack_known_blacklist', 'patchstack_block_debug_log_access', 'patchstack_block_fake_bots', 'patchstack_index_views', 'patchstack_proxy_comment_posting', 'patchstack_bad_query_strings', 'patchstack_advanced_character_string_filter', 'patchstack_advanced_blacklist_firewall', 'patchstack_forbid_rfi', 'patchstack_image_hotlinking', 'patchstack_add_security_headers', 'patchstack_firewall_log_lastid', 'patchstack_user_log_lastid', 'patchstack_captcha_public_key', 'patchstack_captcha_private_key', 'patchstack_scan_interval', 'patchstack_scan_day', 'patchstack_scan_time', 'patchstack_hackers_log', 'patchstack_users_log', 'patchstack_visitors_log', 'external_updates-webarx', 'patchstack_wp_stats', 'patchstack_captcha_login_form', 'patchstack_license_activated', 'patchstack_license_expiry', 'patchstack_software_data_hash', 'patchstack_mv_wp_login', 'patchstack_rename_wp_login', 'patchstack_googledrive_backup_is_running', 'patchstack_googledrive_upload_state', 'patchstack_googledrive_access_token', 'patchstack_googledrive_refresh_token', 'patchstack_cron_offset', 'patchstack_htaccess_rules_hash' ];
352 345 foreach ( $options as $option ) {
353 346 delete_option( $option );
354 347
355 348 if ( is_multisite() ) {
@@ -358,9 +351,9 @@
358 351 }
359 352
360 353 // Drop all Patchstack tables.
361 354 global $wpdb;
362 - $tables = array( 'patchstack_user_log', 'patchstack_visitor_log', 'patchstack_firewall_log', 'patchstack_file_hashes', 'patchstack_logic', 'patchstack_ip', 'patchstack_event_log' );
355 + $tables = [ 'patchstack_user_log', 'patchstack_visitor_log', 'patchstack_firewall_log', 'patchstack_file_hashes', 'patchstack_logic', 'patchstack_ip', 'patchstack_event_log' ];
363 356 foreach ( $tables as $table ) {
364 357 $wpdb->query( 'DROP TABLE IF EXISTS ' . $wpdb->prefix . $table );
365 358 }
366 359 }
@@ -377,10 +370,10 @@
377 370 }
378 371 }
379 372
380 373 // Kick it off.
381 -add_action( 'plugins_loaded', array( patchstack(), 'hooks' ) );
374 +add_action( 'plugins_loaded', [ patchstack(), 'init' ] );
382 375
383 376 // Activation and deactivation hooks.
384 -register_activation_hook( __FILE__, array( patchstack(), 'activate' ) );
385 -register_deactivation_hook( __FILE__, array( patchstack(), 'deactivate' ) );
377 +register_activation_hook( __FILE__, [ patchstack(), 'activate' ] );
378 +register_deactivation_hook( __FILE__, [ patchstack(), 'deactivate' ] );
386 379 register_uninstall_hook( __FILE__, 'patchstack_uninstall' );