PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { die("Connection failed: " . $e->getMessage()); } } return $pdo; } /** * XSS Protection helper */ function e($value) { return htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); } /** * CSRF Token generation */ function csrf_token() { if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf_token']; } /** * CSRF Token validation */ function validate_csrf($token) { return !empty($token) && hash_equals($_SESSION['csrf_token'] ?? '', $token); } /** * Format currency */ function format_currency($amount) { return '$' . number_format((float)$amount, 2); }