Changeset 3489790
- Timestamp:
- 03/24/2026 09:36:23 AM (3 days ago)
- Location:
- advanced-ip-blocker/trunk
- Files:
-
- 13 edited
-
advanced-ip-blocker.php (modified) (4 diffs)
-
css/advaipbl-styles.css (modified) (1 diff)
-
includes/class-advaipbl-action-handler.php (modified) (8 diffs)
-
includes/class-advaipbl-admin-pages.php (modified) (7 diffs)
-
includes/class-advaipbl-geolocation-manager.php (modified) (3 diffs)
-
includes/class-advaipbl-main.php (modified) (1 diff)
-
includes/class-advaipbl-settings-manager.php (modified) (4 diffs)
-
js/admin-settings.js (modified) (1 diff)
-
languages/advanced-ip-blocker-es_ES.mo (modified) (previous)
-
languages/advanced-ip-blocker-es_ES.po (modified) (2 diffs)
-
languages/advanced-ip-blocker.pot (modified) (2 diffs)
-
readme.txt (modified) (3 diffs)
-
uninstall.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
advanced-ip-blocker/trunk/advanced-ip-blocker.php
r3487096 r3489790 4 4 Plugin URI: https://advaipbl.com/ 5 5 Description: Your complete WordPress security firewall. Blocks IPs, bots & countries. Includes an intelligent WAF, Threat Scoring, and Two-Factor Authentication. 6 Version: 8.9. 46 Version: 8.9.5 7 7 Author: IniLerm 8 8 Author URI: https://advaipbl.com/ … … 19 19 } 20 20 21 define( 'ADVAIPBL_VERSION', '8.9. 4' );21 define( 'ADVAIPBL_VERSION', '8.9.5' ); 22 22 define( 'ADVAIPBL_PLUGIN_FILE', __FILE__ ); 23 23 … … 118 118 119 119 function advaipbl_activate_plugin() { 120 $instance = ADVAIPBL_Main::get_instance();121 $instance->setup_database_tables();120 // Ejecutar rutinas completas de activación (tablas BD, ajustes por defecto, transients) 121 ADVAIPBL_Main::activate_plugin(); 122 122 123 123 // Disparar el asistente SOLO en instalaciones nuevas. … … 129 129 update_option( 'advaipbl_version_installed', ADVAIPBL_VERSION ); 130 130 131 $instance->resync_block_transients(); 132 133 // Programar crons inmediatamente 131 // Programar crons inmediatamente a través del manager 132 $instance = ADVAIPBL_Main::get_instance(); 134 133 if ( isset( $instance->cron_manager ) ) { 135 134 $instance->cron_manager->schedule_jobs(); -
advanced-ip-blocker/trunk/css/advaipbl-styles.css
r3487096 r3489790 1 1 /** 2 2 * Advanced IP Blocker - Admin Panel Styles 3 * Version: 8.9. 43 * Version: 8.9.5 4 4 */ 5 5 -
advanced-ip-blocker/trunk/includes/class-advaipbl-action-handler.php
r3481949 r3489790 351 351 } 352 352 353 if ( isset( $_SERVER['HTTP_CF_CONNECTING_IP'] ) ) { 354 $options = get_option( ADVAIPBL_Main::OPTION_SETTINGS, [] ); 355 $options['trusted_proxies'] = "AS13335\nAS209242\n" . ( $options['trusted_proxies'] ?? '' ); 356 $proxies_list = array_unique( array_filter( array_map( 'trim', explode( "\n", $options['trusted_proxies'] ) ) ) ); 357 $options['trusted_proxies'] = implode( "\n", $proxies_list ); 358 update_option( ADVAIPBL_Main::OPTION_SETTINGS, $options ); 359 } 360 353 361 // Redirigir al siguiente paso 354 362 wp_safe_redirect( admin_url( 'admin.php?page=advaipbl-setup-wizard&step=2' ) ); … … 376 384 $merged_uas = array_unique( array_merge( $existing_uas, $default_uas ) ); 377 385 update_option( ADVAIPBL_Main::OPTION_BLOCKED_UAS, $merged_uas ); 378 } 386 } else { 387 $options['enable_user_agent_blocking'] = '0'; 388 } 379 389 380 390 // Activar Honeypot si está marcado … … 385 395 $merged_honeypots = array_unique( array_merge( $existing_honeypots, $default_honeypots ) ); 386 396 update_option( ADVAIPBL_Main::OPTION_HONEYPOT_URLS, $merged_honeypots ); 387 } 397 } else { 398 $options['enable_honeypot_blocking'] = '0'; 399 } 400 401 // Activar XML-RPC Smart Protection si está marcado 402 if ( isset( $_POST['activate_xmlrpc_smart'] ) && $_POST['activate_xmlrpc_smart'] === '1' ) { 403 $options['enable_xmlrpc_protection'] = 'smart'; 404 } else { 405 $options['enable_xmlrpc_protection'] = '0'; 406 } 388 407 389 408 update_option( ADVAIPBL_Main::OPTION_SETTINGS, $options ); … … 410 429 $options['enable_htaccess_write'] = '1'; 411 430 $options['enable_htaccess_ip_blocking'] = '1'; 431 $options['enable_htaccess_all_ips'] = '1'; 412 432 $options['htaccess_protect_system_files'] = '1'; 413 433 $options['htaccess_protect_wp_config'] = '1'; … … 432 452 $merged_rules = array_unique( array_merge( $existing_waf_rules, $default_waf_rules ) ); 433 453 update_option( ADVAIPBL_Main::OPTION_WAF_RULES, implode("\n", $merged_rules) ); 454 } else { 455 $options['enable_waf'] = '0'; 434 456 } 435 457 436 458 if ( isset( $_POST['activate_rate_limiting'] ) && $_POST['activate_rate_limiting'] === '1' ) { 437 459 $options['rate_limiting_enable'] = '1'; 460 } else { 461 $options['rate_limiting_enable'] = '0'; 438 462 } 439 463 … … 445 469 wp_schedule_single_event(time() + 10, 'advaipbl_update_spamhaus_list_event'); 446 470 } 471 } else { 472 $options['enable_spamhaus_asn'] = '0'; 447 473 } 448 474 … … 458 484 // Refrescamos las opciones desde la BD por si register_site las ha modificado directamente. 459 485 $options = get_option( ADVAIPBL_Main::OPTION_SETTINGS, [] ); 460 } 486 487 // Descargar la lista de IPs instantáneamente (100k+ list) 488 $this->plugin->community_manager->update_list(); 489 } 490 } else { 491 $options['enable_community_network'] = '0'; 492 $options['enable_community_blocking'] = '0'; 461 493 } 462 494 … … 483 515 if ( isset( $_POST['activate_threat_scoring'] ) && $_POST['activate_threat_scoring'] === '1' ) { 484 516 $options['enable_threat_scoring'] = '1'; 517 } else { 518 $options['enable_threat_scoring'] = '0'; 485 519 } 486 520 -
advanced-ip-blocker/trunk/includes/class-advaipbl-admin-pages.php
r3487096 r3489790 2919 2919 $admin_ip = $this->plugin->get_client_ip(); 2920 2920 $server_ip = $this->plugin->get_server_ip(); 2921 $is_cloudflare = isset($_SERVER['HTTP_CF_CONNECTING_IP']); 2921 2922 ?> 2922 2923 … … 2925 2926 <p><strong><?php esc_html_e( 'Server IP Address:', 'advanced-ip-blocker' ); ?></strong> <code><?php echo esc_html($server_ip ?: 'Could not detect'); ?></code></p> 2926 2927 </div> 2928 2929 <?php if ($is_cloudflare): ?> 2930 <div class="notice notice-success inline" style="margin-top: 15px;"> 2931 <p><strong><?php esc_html_e( 'Cloudflare Detected!', 'advanced-ip-blocker' ); ?></strong> <?php esc_html_e( 'We noticed you are using Cloudflare. We will automatically configure the correct IP detection settings to prevent false blocks.', 'advanced-ip-blocker' ); ?></p> 2932 </div> 2933 <?php else: ?> 2934 <div class="notice notice-info inline" style="margin-top: 15px;"> 2935 <p><strong><?php esc_html_e( 'Using a Proxy/CDN?', 'advanced-ip-blocker' ); ?></strong> <?php esc_html_e( 'If your traffic goes through proxies like Sucuri or AWS ELB, you must configure Trusted Proxies in the Settings tab later to avoid blocking yourself.', 'advanced-ip-blocker' ); ?></p> 2936 </div> 2937 <?php endif; ?> 2927 2938 2928 2939 <form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>"> … … 2967 2978 </label> 2968 2979 </div> 2980 <div class="wizard-option-item"> 2981 <label> 2982 <input type="checkbox" name="activate_xmlrpc_smart" value="1" checked> 2983 <div> 2984 <strong><?php esc_html_e( 'Enable Smart XML-RPC Protection', 'advanced-ip-blocker' ); ?></strong> 2985 <p class="description"><?php esc_html_e( '(Recommended) Blocks brute-force attacks on xmlrpc.php while allowing legitimate services like Jetpack to function.', 'advanced-ip-blocker' ); ?></p> 2986 </div> 2987 </label> 2988 </div> 2969 2989 2970 2990 </div> … … 2981 3001 <h2><?php esc_html_e( 'Step 3: Activate Proactive Defenses', 'advanced-ip-blocker' ); ?></h2> 2982 3002 <p><?php esc_html_e( 'Now let\'s enable the firewall to protect your site from more advanced attacks like SQL injection and prevent server overload from aggressive bots.', 'advanced-ip-blocker' ); ?></p> 2983 <form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">3003 <form id="advaipbl-wizard-step3-form" method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>"> 2984 3004 <input type="hidden" name="action" value="advaipbl_wizard_step_3"> 2985 3005 <?php wp_nonce_field( 'advaipbl_wizard_step_3_nonce' ); ?> … … 3022 3042 </label> 3023 3043 </div> 3024 <div class="wizard-option-item">3044 <div class="wizard-option-item"> 3025 3045 <label> 3026 3046 <input type="checkbox" name="activate_community_network" value="1" checked> … … 3033 3053 3034 3054 </div> 3055 3056 <div class="notice notice-info inline" style="margin-top: 15px;"> 3057 <p><strong><?php esc_html_e( 'Geolocation Note:', 'advanced-ip-blocker' ); ?></strong> <?php esc_html_e( 'Powered by ip-api.com for zero-setup convenience. For maximum privacy and local performance, we recommend switching to the MaxMind Local Database in the settings after completing this wizard.', 'advanced-ip-blocker' ); ?></p> 3058 </div> 3059 3035 3060 <p class="submit"> 3036 3061 <button type="submit" name="submit" class="button button-primary button-hero"><?php esc_html_e( 'Activate Proactive Defenses', 'advanced-ip-blocker' ); ?></button> … … 3110 3135 </a> 3111 3136 </div> 3112 </div> >3137 </div> 3113 3138 3114 3139 <?php -
advanced-ip-blocker/trunk/includes/class-advaipbl-geolocation-manager.php
r3434197 r3489790 68 68 $main_instance = ADVAIPBL_Main::get_instance(); 69 69 $provider = $main_instance->options['geolocation_provider'] ?? 'ip-api.com'; 70 71 // Check Circuit Breaker (Global API Timeout) 72 if ( get_transient( 'advaipbl_geo_api_down_' . $provider ) ) { 73 return ['error' => true, 'error_message' => 'API is temporarily unreachable (Circuit Breaker Active)']; 74 } 75 70 76 $api_key_transient = get_transient('advaipbl_transient_api_key_' . $provider); 71 77 $api_key = $api_key_transient ?: ($main_instance->options['api_key_' . str_replace('.', '', $provider)] ?? ''); … … 98 104 } 99 105 100 $response = wp_remote_get($url, ['timeout' => 10]); 106 // Limit timeout to 3 seconds instead of 10 to prevent hanging the whole site 107 $response = wp_remote_get($url, ['timeout' => 3]); 101 108 102 109 if (is_wp_error($response)) { 110 // Activate Circuit Breaker for 5 minutes if there's a connection error 111 set_transient( 'advaipbl_geo_api_down_' . $provider, true, 5 * MINUTE_IN_SECONDS ); 103 112 return ['error' => true, 'error_message' => $response->get_error_message()]; 104 113 } … … 108 117 109 118 if (!$data) { 119 // Activate Circuit Breaker for 5 minutes on malformed response 120 set_transient( 'advaipbl_geo_api_down_' . $provider, true, 5 * MINUTE_IN_SECONDS ); 110 121 return ['error' => true, 'error_message' => 'Invalid response from API.']; 111 122 } -
advanced-ip-blocker/trunk/includes/class-advaipbl-main.php
r3487096 r3489790 4624 4624 'maxmind_license_key' => '', 4625 4625 4626 'enable_community_network' => ' 1', // Por defecto 0 hasta que el usuario acepte4626 'enable_community_network' => '0', // Por defecto 0 hasta que el usuario acepte o complete el Wizard 4627 4627 4628 4628 // AIB Community Network 4629 'enable_community_network' => '1',4630 4629 'enable_community_blocking' => '1', 4631 4630 'community_blocking_action' => 'block', -
advanced-ip-blocker/trunk/includes/class-advaipbl-settings-manager.php
r3483567 r3489790 992 992 993 993 $defaults = $this->plugin->get_default_settings(); 994 // Base starting point is the EXISTING settings. This prevents wiping tabs that weren't submitted. 995 $existing_options = get_option( ADVAIPBL_Main::OPTION_SETTINGS, [] ); 996 if ( ! is_array( $existing_options ) ) { 997 $existing_options = []; 998 } 999 $new_input = $existing_options; 994 1000 995 1001 $numeric_fields = [ 996 'duration_geoblock', 'duration_waf', 'duration_rate_limit', 'rate_limiting_limit', 'rate_limiting_window', 997 'duration_xmlrpc_block', 'duration_asn', 'log_retention_days', 'threshold_404', 'duration_404', 'transient_expiration_404', 998 'threshold_403', 'duration_403', 'transient_expiration_403', 'threshold_login', 999 'duration_login', 'transient_expiration_login', 'duration_honeypot', 'duration_user_agent', 1002 'threshold_404', 'duration_404', 'transient_expiration_404', 1003 'threshold_403', 'duration_403', 'transient_expiration_403', 1004 'threshold_login', 'duration_login', 'transient_expiration_login', 1005 'duration_geoblock', 'duration_honeypot', 'duration_user_agent', 'duration_waf', 'duration_rate_limit', 1006 'rate_limiting_limit', 'rate_limiting_window', 'duration_asn', 'duration_xmlrpc_block', 1007 'rows_per_page', 'log_retention_days', 1000 1008 'threat_score_threshold', 'duration_threat_score', 'score_404', 'score_403', 'score_login', 1001 1009 'score_user_agent', 'score_waf', 'score_honeypot', 'score_asn', 'score_impersonation', … … 1009 1017 ]; 1010 1018 foreach ($numeric_fields as $field) { 1011 // Si el campo existe en el input, lo actualizamos. Si no, el valor antiguo se mantiene.1012 1019 if (isset($input[$field])) { 1013 1020 $new_input[$field] = absint($input[$field]); … … 1054 1061 1055 1062 foreach ($checkbox_fields as $field) { 1056 // Para checkboxes, si existen en el input, es '1'. Si no, es '0'. 1057 $new_input[$field] = (isset($input[$field]) && $input[$field] === '1') ? '1' : '0'; 1063 // Dado que hemos inyectado un input oculto, SIEMPRE recibiremos '0' o '1' si la pestaña fue enviada. 1064 // Si el campo fue enviado en $input (0 o 1), actualizamos $new_input. 1065 // Si no fue enviado en $input en absoluto (es decir, pertenece a OTRA pestaña no enviada), conservamos el valor previo en $new_input. 1066 if (isset($input[$field])) { 1067 $new_input[$field] = ( $input[$field] === '1' ) ? '1' : '0'; 1068 } 1058 1069 } 1059 1070 … … 1236 1247 1237 1248 $html = sprintf( 1238 '<label for="%s" class="advaipbl-switch"> 1249 '<!-- HIDDEN FALLBACK FOR WP SETTINGS API --> 1250 <input type="hidden" name="%s" value="0" /> 1251 <label for="%s" class="advaipbl-switch"> 1239 1252 <input type="checkbox" name="%s" id="%s" value="1" %s /> 1240 1253 <span class="advaipbl-slider"></span> 1241 1254 </label>', 1255 esc_attr( 'advaipbl_settings[' . $args['name'] . ']' ), 1242 1256 esc_attr( $id_attr ), 1243 1257 esc_attr( 'advaipbl_settings[' . $args['name'] . ']' ), -
advanced-ip-blocker/trunk/js/admin-settings.js
r3487096 r3489790 919 919 } 920 920 921 function initWizardEnhancements() { 922 $('#advaipbl-wizard-step3-form').on('submit', function() { 923 var $form = $(this); 924 var $btn = $form.find('button[type="submit"]'); 925 var $checkbox = $form.find('input[name="activate_community_network"]'); 926 927 // Only protect if they are indeed enabling the network 928 if ($checkbox.is(':checked')) { 929 // If the user already clicked, don't submit again 930 if ($btn.prop('disabled')) { 931 return false; 932 } 933 var activeText = (adminData.text && adminData.text.verifying_api) ? adminData.text.verifying_api : 'Activating & Downloading Threat List...'; 934 $btn.prop('disabled', true).text(activeText); 935 } 936 }); 937 } 938 939 initWizardEnhancements(); 921 940 initWhitelistAjaxButton(); 922 941 -
advanced-ip-blocker/trunk/languages/advanced-ip-blocker-es_ES.po
r3487096 r3489790 5 5 "blocker\n" 6 6 "POT-Creation-Date: 2025-07-22 14:47+0200\n" 7 "PO-Revision-Date: 2026-03- 19 10:36+0100\n"7 "PO-Revision-Date: 2026-03-23 12:01+0100\n" 8 8 "Last-Translator: \n" 9 9 "Language-Team: \n" … … 8243 8243 "más de 100.000 IP, vaya a la configuración del plugin y <a " 8244 8244 "href=\"%s\">Registre AIB Network Integration</a>." 8245 8246 #: includes/class-advaipbl-admin-pages.php 8247 msgid "Cloudflare Detected!" 8248 msgstr "¡Cloudflare detectado!" 8249 8250 #: includes/class-advaipbl-admin-pages.php 8251 msgid "" 8252 "We noticed you are using Cloudflare. We will automatically configure the " 8253 "correct IP detection settings to prevent false blocks." 8254 msgstr "" 8255 "Hemos detectado que utilizas Cloudflare. Configuraremos automáticamente los " 8256 "ajustes de detección de IP para evitar bloqueos erróneos." 8257 8258 #: includes/class-advaipbl-admin-pages.php 8259 msgid "Using a Proxy/CDN?" 8260 msgstr "¿Utilizas un proxy/CDN?" 8261 8262 #: includes/class-advaipbl-admin-pages.php 8263 msgid "" 8264 "If your traffic goes through proxies like Sucuri or AWS ELB, you must " 8265 "configure Trusted Proxies in the Settings tab later to avoid blocking " 8266 "yourself." 8267 msgstr "" 8268 "Si su tráfico pasa por servidores proxy como Sucuri o AWS ELB, deberá " 8269 "configurar los Proxies de confianza en la pestaña Configuración más adelante " 8270 "para evitar bloqueos." 8271 8272 #: includes/class-advaipbl-admin-pages.php 8273 msgid "Enable Smart XML-RPC Protection" 8274 msgstr "Habilitar la protección inteligente de XML-RPC" 8275 8276 #: includes/class-advaipbl-admin-pages.php 8277 msgid "" 8278 "(Recommended) Blocks brute-force attacks on xmlrpc.php while allowing " 8279 "legitimate services like Jetpack to function." 8280 msgstr "" 8281 "(Recomendado) Bloquea los ataques de fuerza bruta en xmlrpc.php, al tiempo " 8282 "que permite que funcionen servicios legítimos como Jetpack." 8283 8284 #: includes/class-advaipbl-admin-pages.php 8285 msgid "Geolocation Note:" 8286 msgstr "Nota de geolocalización:" 8287 8288 #: includes/class-advaipbl-admin-pages.php 8289 msgid "" 8290 "Powered by ip-api.com for zero-setup convenience. For maximum privacy and " 8291 "local performance, we recommend switching to the MaxMind Local Database in " 8292 "the settings after completing this wizard." 8293 msgstr "" 8294 "Con tecnología de ip-api.com para una configuración sencilla. Para obtener " 8295 "la máxima privacidad y rendimiento local, recomendamos cambiar a la base de " 8296 "datos local de MaxMind en la configuración tras completar este asistente." 8297 8298 #: js/admin-settings.js 8299 msgid "Activating & Downloading Threat List..." 8300 msgstr "Activando y descargando la lista de amenazas..." 8245 8301 8246 8302 #~ msgid "Installed Themes Analysis" -
advanced-ip-blocker/trunk/languages/advanced-ip-blocker.pot
r3487096 r3489790 4 4 msgid "" 5 5 msgstr "" 6 "Project-Id-Version: Advanced IP Blocker 8.9. 4\n"6 "Project-Id-Version: Advanced IP Blocker 8.9.5\n" 7 7 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/advanced-ip-blocker\n" 8 8 "POT-Creation-Date: 2025-07-22 14:47+0200\n" … … 7488 7488 msgid "<strong>Advanced IP Blocker:</strong> You are receiving a limited community threat feed (50,000 IPs). To increase your protection level to 100,000+ IPs, please go to the plugin settings and <a href=\"%s\">Register the AIB Network Integration</a>." 7489 7489 msgstr "" 7490 7491 #: includes/class-advaipbl-admin-pages.php 7492 msgid "Cloudflare Detected!" 7493 msgstr "" 7494 7495 #: includes/class-advaipbl-admin-pages.php 7496 msgid "We noticed you are using Cloudflare. We will automatically configure the correct IP detection settings to prevent false blocks." 7497 msgstr "" 7498 7499 #: includes/class-advaipbl-admin-pages.php 7500 msgid "Using a Proxy/CDN?" 7501 msgstr "" 7502 7503 #: includes/class-advaipbl-admin-pages.php 7504 msgid "If your traffic goes through proxies like Sucuri or AWS ELB, you must configure Trusted Proxies in the Settings tab later to avoid blocking yourself." 7505 msgstr "" 7506 7507 #: includes/class-advaipbl-admin-pages.php 7508 msgid "Enable Smart XML-RPC Protection" 7509 msgstr "" 7510 7511 #: includes/class-advaipbl-admin-pages.php 7512 msgid "(Recommended) Blocks brute-force attacks on xmlrpc.php while allowing legitimate services like Jetpack to function." 7513 msgstr "" 7514 7515 #: includes/class-advaipbl-admin-pages.php 7516 msgid "Geolocation Note:" 7517 msgstr "" 7518 7519 #: includes/class-advaipbl-admin-pages.php 7520 msgid "Powered by ip-api.com for zero-setup convenience. For maximum privacy and local performance, we recommend switching to the MaxMind Local Database in the settings after completing this wizard." 7521 msgstr "" 7522 7523 #: js/admin-settings.js 7524 msgid "Activating & Downloading Threat List..." 7525 msgstr "" -
advanced-ip-blocker/trunk/readme.txt
r3487096 r3489790 6 6 Requires at least: 6.7 7 7 Tested up to: 6.9 8 Stable tag: 8.9. 48 Stable tag: 8.9.5 9 9 Requires PHP: 8.1 10 10 License: GPLv2 or later … … 227 227 == Changelog == 228 228 229 = 8.9.5 = 230 * **NEW SETUP WIZARD:** Redesigned the onboarding experience with "Zero Friction". Automatic proxy detection for Cloudflare (`HTTP_CF_CONNECTING_IP`) is now included, securing accurate visitor IP identification instantly. 231 * **ENHANCEMENT:** Proactive AIB Network V3 Activation. Upon user consent, the wizard seamlessly registers your API Key and bulk downloads the latest active threat list (100k+ IPs) in the background with clear progress indicators, avoiding any disruption. 232 * **SECURITY HARDENING:** XML-RPC settings are now set to "Smart Protection" by default, improving the security posture out-of-the-box. 233 * **TRANSPARENCY:** Included detailed privacy notes regarding the usage of MaxMind versus `ip-api.com` for local geolocation databases. 234 * **UX IMPROVEMENT:** The "Blocked Countries" Select2 dropdown now hides already selected regions natively, vastly improving usability for multi-site and complex configurations. 235 229 236 = 8.9.4 = 230 237 * **CRITICAL FIX:** Resolved an issue where the Site Health & Vulnerability Scanner could fail to download the latest threat definitions due to Wordfence API V2 deprecation. Successfully migrated to the Wordfence V3 API with secure authentication. … … 260 267 == Upgrade Notice == 261 268 269 = 8.9.5 = 270 **ZERO FRICTION ONBOARDING & UX UPGRADE:** The Setup Wizard has been overhauled! Version 8.9.5 introduces automated proxy detection, seamless background threat list downloading, and a heavily requested fix to the Geolocation Select2 UI. We highly recommend upgrading to streamline your initial security configuration. 271 262 272 = 8.9.4 = 263 273 **SECURITY & UX UPDATE:** Essential fix for the Vulnerability Scanner to restore automated threat definition downloads via the new Wordfence V3 API. Also includes major UX improvements to the AIB Community Network registration flow. Update recommended. -
advanced-ip-blocker/trunk/uninstall.php
r3481949 r3489790 187 187 // Security Headers 188 188 'advaipbl_security_headers', // Added from SQL dump 189 190 // System Flags 191 'advaipbl_flush_firewalls_needed', 189 192 ]; 190 193 … … 248 251 // Added from SQL dump 249 252 'advaipbl_update_community_list_event', 250 'advaipbl_community_report_event_v2' 253 'advaipbl_community_report_event_v2', 254 'advaipbl_cloudflare_sync_event', 255 'advaipbl_clear_expired_blocks_event' 251 256 ]; 252 257 // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound
Note: See TracChangeset
for help on using the changeset viewer.