} } // Option 3: Letzter Fallback - aber sicherer als Klartext if (!$username || !$password) { // Base64-kodiert (minimal obfuskiert, aber nicht wirklich sicher) $encoded = 'YmVvZ3J1cHBlOkFya3RVaHI='; // beogruppe:ArktUhr $decoded = base64_decode($encoded); list($username, $password) = explode(':', $decoded, 2); } // Sicherheitscheck if (!$username || !$password) { http_response_code(500); echo 'Server configuration error'; exit(); } // POST-Daten aus dem Frontend übernehmen $postData = $_POST; // Debug-Log (optional, für Entwicklung) error_log("CORS-Proxy: Weiterleitung an Backend mit " . count($postData) . " Parametern"); // cURL-Request an das geschützte Backend $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $backendUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Response vom Backend holen $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $error = curl_error($ch); curl_close($ch); // Fehlerbehandlung if ($response === false) { http_response_code(500); echo "Backend-Verbindungsfehler: " . $error; exit(); } // HTTP-Status vom Backend übernehmen http_response_code($httpCode); // Content-Type vom Backend übernehmen (falls JSON) if (strpos($response, '{') === 0 || strpos($response, '[') === 0) { header('Content-Type: application/json'); } else { header('Content-Type: text/plain'); } // Response vom Backend weiterleiten echo $response; ?>