{"table_name":"webdecoy_blocked_ips","full_table_name":"wp_webdecoy_blocked_ips","description":"Stores webdecoy blocked ips data created by this plugin.","detection_method":"static","confidence":"high","create_sql":"CREATE TABLE IF NOT EXISTS wp_webdecoy_blocked_ips ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, ip_address VARCHAR(45) NOT NULL, reason VARCHAR(255) DEFAULT '', blocked_at DATETIME NOT NULL, expires_at DATETIME DEFAULT NULL, created_by VARCHAR(100) DEFAULT 'system', PRIMARY KEY (id), UNIQUE KEY ip_address (ip_address), KEY expires_at (expires_at) ) $charset_collate;\"; // Local detections table (cache) $sql_detections = \"CREATE TABLE IF NOT EXISTS wp_webdecoy_detections ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, remote_id VARCHAR(36) DEFAULT NULL, ip_address VARCHAR(45) NOT NULL, user_agent TEXT, score INT UNSIGNED DEFAULT 0, threat_level VARCHAR(20) DEFAULT 'MINIMAL', source VARCHAR(50) DEFAULT 'bot_scanner', flags TEXT DEFAULT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY ip_address (ip_address), KEY created_at (created_at), KEY threat_level (threat_level) ) $charset_collate;\"; // Rate limiting table $sql_rate_limits = \"CREATE TABLE IF NOT EXISTS wp_webdecoy_rate_limits ( ip_address VARCHAR(45) NOT NULL, request_count INT UNSIGNED DEFAULT 1, window_start DATETIME NOT NULL, PRIMARY KEY (ip_address), KEY window_start (window_start) ) $charset_collate;\"; // Checkout attempts table (WooCommerce) $sql_checkout = \"CREATE TABLE IF NOT EXISTS wp_webdecoy_checkout_attempts ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, ip_address VARCHAR(45) NOT NULL, order_id BIGINT UNSIGNED DEFAULT NULL, status VARCHAR(20) DEFAULT 'attempt', amount DECIMAL(10, 2) DEFAULT 0.00, card_last4 VARCHAR(4) DEFAULT NULL, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY ip_address (ip_address), KEY created_at (created_at), KEY status (status) ) $charset_collate;\"; // Violation queue table — spool for rule-engine violations awaiting // delivery to the ingest service (resilient reporting: survives ingest // downtime, retried by cron). Only used when a Cloud API key is set. $sql_violation_queue = \"CREATE TABLE IF NOT EXISTS wp_webdecoy_violation_queue ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, payload LONGTEXT NOT NULL, attempts TINYINT UNSIGNED DEFAULT 0, created_at DATETIME NOT NULL, PRIMARY KEY (id), KEY created_at (created_at) ) $charset_collate;\"; require_once ABSPATH . 'wp-admin/includes/upgrade.php'; dbDelta($sql_blocked);","columns":[{"name":"id","type":"BIGINT UNSIGNED","nullable":false,"primary_key":true},{"name":"ip_address","type":"VARCHAR(45)","nullable":false,"primary_key":false},{"name":"reason","type":"VARCHAR(255)","nullable":true,"primary_key":false},{"name":"blocked_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"expires_at","type":"DATETIME","nullable":true,"primary_key":false},{"name":"created_by","type":"VARCHAR(100)","nullable":true,"primary_key":false},{"name":"remote_id","type":"VARCHAR(36)","nullable":true,"primary_key":false},{"name":"ip_address","type":"VARCHAR(45)","nullable":false,"primary_key":false},{"name":"user_agent","type":"TEXT","nullable":true,"primary_key":false},{"name":"score","type":"INT UNSIGNED","nullable":true,"primary_key":false},{"name":"threat_level","type":"VARCHAR(20)","nullable":true,"primary_key":false},{"name":"source","type":"VARCHAR(50)","nullable":true,"primary_key":false},{"name":"flags","type":"TEXT","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"request_count","type":"INT UNSIGNED","nullable":true,"primary_key":false},{"name":"window_start","type":"DATETIME","nullable":false,"primary_key":false},{"name":"ip_address","type":"VARCHAR(45)","nullable":false,"primary_key":false},{"name":"order_id","type":"BIGINT UNSIGNED","nullable":true,"primary_key":false},{"name":"status","type":"VARCHAR(20)","nullable":true,"primary_key":false},{"name":"amount","type":"DECIMAL(10, 2)","nullable":true,"primary_key":false},{"name":"card_last4","type":"VARCHAR(4)","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false},{"name":"retried","type":"by","nullable":false,"primary_key":true},{"name":"payload","type":"LONGTEXT","nullable":false,"primary_key":false},{"name":"attempts","type":"TINYINT UNSIGNED","nullable":true,"primary_key":false},{"name":"created_at","type":"DATETIME","nullable":false,"primary_key":false}],"plugin":{"slug":"webdecoy","name":"WebDecoy Bot Detection – Block AI Crawlers, Spam Bots & Card Testing","active_installs":0,"version":"2.7.1","wp_org_url":"https://wordpress.org/plugins/webdecoy/"}}