Real changes since 1.0.0, all live-verified before this release: - Firewall: rule corpus expanded 19 -> 43 rules, real OWASP-CRS-equivalent coverage (XXE, SSRF, session fixation, Log4Shell/JNDI, scanner-tool detection, deeper SQL injection/XSS/PHP-injection). - Fixed a real bug: a quarantined file's severity badge and its content analysis score could disagree with no explanation (e.g. a benign file showing CRITICAL next to Score 0); both are now derived consistently and shown together. - ARGUS now always keeps itself updated, and can optionally do the same for every other installed plugin and theme (Settings, on by default) -- uses WordPress's own native update system, nothing custom. - Global Threat Intelligence is now opt-in, not automatic -- a single click on its own page, with an honest, specific description of exactly what's shared (an IP address, a reason code, a confidence score, a country). Previously connected automatically on activation. - New first-run Welcome screen after activation: confirms what's already protecting the site, and surfaces the few real optional choices in one place. - Dashboard: running version now visible in the header; new "IPs Tracked" and "ANIS Protections" metrics. - Full WordPress.org Plugin Directory readiness audit performed against this codebase. Two real compliance issues found and fixed (see above: Global Threat Intelligence's default, and the self-update mechanism, which is excluded from this build entirely -- WordPress.org prohibits a plugin from using any update channel other than its own, even an inert one). This release is still self-distributed, not a WordPress.org submission -- that remains a future step. Verified before publishing: this exact ZIP was installed, activated (14 admin pages loaded clean, zero PHP errors/warnings), and uninstalled (zero leftover database tables or options) in a fresh, disposable WordPress + MySQL environment. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
60 lines
3.6 KiB
PHP
60 lines
3.6 KiB
PHP
<?php
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
$argus_active_page = $argus_active_page ?? 'overview';
|
|
$argus_mode = Argus_Settings::mode();
|
|
$argus_mode_labels = array( 'monitor' => 'Monitor', 'block' => 'Block', 'strict' => 'Strict' );
|
|
|
|
$argus_domain = wp_parse_url( home_url(), PHP_URL_HOST ) ?: get_bloginfo( 'name' );
|
|
|
|
$argus_protection_state = Argus_Console_Stats::protection_state();
|
|
$argus_protection_labels = array(
|
|
'protected' => array( 'class' => 'on', 'label' => __( 'Protected', 'argus-wordpress-defence' ) ),
|
|
'action_required' => array( 'class' => 'danger', 'label' => __( 'Action Required', 'argus-wordpress-defence' ) ),
|
|
'checking' => array( 'class' => 'checking', 'label' => __( 'Checking Security', 'argus-wordpress-defence' ) ),
|
|
);
|
|
$argus_protection_display = $argus_protection_labels[ $argus_protection_state ] ?? $argus_protection_labels['protected'];
|
|
|
|
$argus_nav_items = array(
|
|
'overview' => array( __( 'Overview', 'argus-wordpress-defence' ), 'argus-wpd-dashboard' ),
|
|
'firewall' => array( __( 'Firewall', 'argus-wordpress-defence' ), 'argus-wpd-firewall' ),
|
|
'threats' => array( __( 'Threats', 'argus-wordpress-defence' ), 'argus-wpd-threats' ),
|
|
'findings' => array( __( 'Findings', 'argus-wordpress-defence' ), 'argus-wpd-findings' ),
|
|
'scanner' => array( __( 'Scanner', 'argus-wordpress-defence' ), 'argus-wpd-scanner' ),
|
|
'quarantine' => array( __( 'Quarantine', 'argus-wordpress-defence' ), 'argus-wpd-quarantine' ),
|
|
'cache' => array( __( 'Cache & Performance', 'argus-wordpress-defence' ), 'argus-wpd-cache' ),
|
|
'backups' => array( __( 'Backups', 'argus-wordpress-defence' ), 'argus-wpd-backups' ),
|
|
'vulnerabilities' => array( __( 'Vulnerabilities', 'argus-wordpress-defence' ), 'argus-wpd-vulnerabilities' ),
|
|
'intelligence' => array( __( 'Intelligence', 'argus-wordpress-defence' ), 'argus-wpd-intelligence' ),
|
|
'anis' => array( __( 'ANIS', 'argus-wordpress-defence' ), 'argus-wpd-anis' ),
|
|
'audit-log' => array( __( 'Audit Log', 'argus-wordpress-defence' ), 'argus-wpd-audit-log' ),
|
|
);
|
|
?>
|
|
<div class="argus-wpd-shell">
|
|
<div class="argus-wpd-inner">
|
|
|
|
<div class="argus-wpd-topbar">
|
|
<div class="argus-wpd-logo">🛡</div>
|
|
<div class="argus-wpd-brand">
|
|
<span class="argus-wpd-eyebrow"><span class="dot"></span>ARGUS DEFENCE · SECURITY OPERATIONS CENTER</span>
|
|
<span class="argus-wpd-title"><?php echo esc_html( $argus_domain ); ?></span>
|
|
<span class="argus-wpd-domain-caption"><?php esc_html_e( 'ARGUS Defence is protecting this website', 'argus-wordpress-defence' ); ?></span>
|
|
</div>
|
|
<div class="argus-wpd-status-badge <?php echo esc_attr( $argus_protection_display['class'] ); ?>">
|
|
<span class="dot"></span>
|
|
<?php echo esc_html( $argus_protection_display['label'] ); ?>
|
|
· <?php echo esc_html( $argus_mode_labels[ $argus_mode ] ?? $argus_mode ); ?>
|
|
</div>
|
|
<span class="argus-wpd-version" title="<?php esc_attr_e( 'ARGUS WordPress Defence version', 'argus-wordpress-defence' ); ?>">v<?php echo esc_html( ARGUS_WPD_VERSION ); ?></span>
|
|
<a href="<?php echo esc_url( admin_url( 'admin.php?page=argus-wpd-settings' ) ); ?>" class="argus-wpd-gear <?php echo 'settings' === $argus_active_page ? 'active' : ''; ?>" title="<?php esc_attr_e( 'Settings', 'argus-wordpress-defence' ); ?>">⚙</a>
|
|
</div>
|
|
|
|
<nav class="argus-wpd-nav">
|
|
<?php foreach ( $argus_nav_items as $key => $item ) : ?>
|
|
<a href="<?php echo esc_url( admin_url( 'admin.php?page=' . $item[1] ) ); ?>" class="<?php echo $key === $argus_active_page ? 'active' : ''; ?>"><?php echo esc_html( $item[0] ); ?></a>
|
|
<?php endforeach; ?>
|
|
</nav>
|