From 4d5f7597b28a24b6af47730c89331af4d5c3cff3 Mon Sep 17 00:00:00 2001 From: pw Date: Thu, 26 Jun 2025 18:35:08 +0200 Subject: [PATCH] =?UTF-8?q?process=5Femail.php=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process_email.php | 194 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 process_email.php diff --git a/process_email.php b/process_email.php new file mode 100644 index 0000000..f1271bd --- /dev/null +++ b/process_email.php @@ -0,0 +1,194 @@ +]+)/', $from, $fromDomainMatch); + $fromDomain = isset($fromDomainMatch[1]) ? trim($fromDomainMatch[1]) : ''; + + preg_match('/@([^>]+)/', $returnPath, $returnPathDomainMatch); + $returnPathDomain = isset($returnPathDomainMatch[1]) ? trim($returnPathDomainMatch[1]) : ''; + + preg_match('/@([^>]+)/', $replyTo, $replyToDomainMatch); + $replyToDomain = isset($replyToDomainMatch[1]) ? trim($replyToDomainMatch[1]) : ''; + + + if ($fromDomain && $returnPathDomain && $fromDomain !== $returnPathDomain) { + $warnings[] = "Achtung: Die Absenderdomain ('" . htmlspecialchars($fromDomain) . "') stimmt nicht mit der 'Return-Path'-Domain ('" . htmlspecialchars($returnPathDomain) . "') überein. Dies könnte ein Indikator für Spoofing sein."; + } + if ($fromDomain && $replyToDomain && $fromDomain !== $replyToDomain) { + $warnings[] = "Warnung: Die Absenderdomain ('" . htmlspecialchars($fromDomain) . "') stimmt nicht mit der 'Reply-To'-Domain ('" . htmlspecialchars($replyToDomain) . "') überein. Eine Diskrepanz kann auf Betrug hindeuten."; + } + + // 2. Ungewöhnliche Zeichen oder Encoding im Betreff oder Absender + $subject = isset($headers['Subject']) ? $headers['Subject'] : ''; + if (preg_match('/=\?UTF-8\?B\?/', $subject) || preg_match('/=\?UTF-8\?Q\?/', $subject)) { + // Dies ist nicht unbedingt ein Phishing-Indikator, da es legitimes Encoding sein kann. + // Aber in Kombination mit anderen Warnungen kann es relevant sein. + // $warnings[] = "Hinweis: Der Betreff enthält codierte Zeichen (Quoted-Printable oder Base64)."; + } + + // 3. Häufige Phishing-Keywords im Betreff oder Body (sehr rudimentär) + $keywords = ['bestätigung', 'konto', 'passwort', 'sicherheit', 'aktualisieren', 'blockiert', 'dringend', 'zahlung', 'rechnung', 'gewinn', 'glückwunsch']; + foreach ($keywords as $keyword) { + if (stripos($subject, $keyword) !== false) { + $warnings[] = "Hinweis: Das Wort '" . htmlspecialchars($keyword) . "' wurde im Betreff gefunden. Dies ist oft in Phishing-Mails zu finden."; + break; // Nur eine Warnung pro Betreff, wenn mehrere Keywords gefunden werden + } + } + foreach ($keywords as $keyword) { + if (stripos($emailContent, $keyword) !== false) { + $warnings[] = "Hinweis: Das Wort '" . htmlspecialchars($keyword) . "' wurde im E-Mail-Text gefunden. Dies ist oft in Phishing-Mails zu finden."; + break; // Nur eine Warnung pro Body, wenn mehrere Keywords gefunden werden + } + } + + + // 4. Links prüfen (sehr komplex, hier nur ein Platzhalter für spätere Erweiterung) + // Man müsste hier alle URLs extrahieren und dann prüfen, ob sie von den angezeigten Domains abweichen, + // bekannte Blacklists abfragen, etc. + if (preg_match_all('/https?:\/\/[^\s"\']+/i', $emailContent, $matches)) { + foreach ($matches[0] as $url) { + // Beispiel einer sehr einfachen Prüfung: Wenn die URL-Domain nicht mit der From-Domain übereinstimmt + $urlParts = parse_url($url); + $urlDomain = isset($urlParts['host']) ? $urlParts['host'] : ''; + + if ($urlDomain && $fromDomain && strpos($urlDomain, $fromDomain) === false && strpos($fromDomain, $urlDomain) === false) { + // Diese Bedingung ist sehr einfach und kann viele False-Positives erzeugen. + // Echte Prüfungen würden hier viel komplexer sein. + $warnings[] = "Warnung: Ein Link mit der Domain '" . htmlspecialchars($urlDomain) . "' wurde gefunden, die sich von der Absenderdomain ('" . htmlspecialchars($fromDomain) . "') unterscheidet. Seien Sie vorsichtig bei solchen Links."; + } + } + } + + + // 5. Fehlende oder seltsame Header + $importantHeaders = ['From', 'To', 'Subject', 'Date', 'Message-ID']; + foreach ($importantHeaders as $header) { + if (!isset($headers[$header])) { + $warnings[] = "Warnung: Der wichtige Header '" . htmlspecialchars($header) . "' fehlt."; + } + } + + // 6. X-Mailer / User-Agent Prüfung + // Phisher nutzen oft generische oder ungewöhnliche Mailer + $xMailer = isset($headers['X-Mailer']) ? strtolower($headers['X-Mailer']) : ''; + $userAgent = isset($headers['User-Agent']) ? strtolower($headers['User-Agent']) : ''; + + if (empty($xMailer) && empty($userAgent)) { + $warnings[] = "Hinweis: 'X-Mailer' oder 'User-Agent' Header fehlen. Dies ist manchmal bei automatisierten oder ungewöhnlichen Mail-Systemen der Fall."; + } elseif (strpos($xMailer, 'microsoft outlook') === false && strpos($xMailer, 'thunderbird') === false && + strpos($userAgent, 'microsoft outlook') === false && strpos($userAgent, 'thunderbird') === false && + strpos($xMailer, 'mail.app') === false && strpos($userAgent, 'mail.app') === false && + strpos($xMailer, 'gmail') === false && strpos($userAgent, 'gmail') === false && + !empty($xMailer)) { // Fügen Sie hier weitere gängige Clients hinzu + $warnings[] = "Hinweis: Ungewöhnlicher oder unbekannter E-Mail-Client ('" . htmlspecialchars($xMailer . $userAgent) . "') im 'X-Mailer'/'User-Agent' Header erkannt. Kann ein Indikator für Massenversand oder Phishing sein."; + } + + + return $warnings; +} + + +if ($_SERVER['REQUEST_METHOD'] === 'POST') { + if (isset($_FILES['email_file']) && $_FILES['email_file']['error'] === UPLOAD_ERR_OK) { + $fileTmpPath = $_FILES['email_file']['tmp_name']; + $fileName = $_FILES['email_file']['name']; + $fileSize = $_FILES['email_file']['size']; + $fileType = $_FILES['email_file']['type']; + $fileNameCmps = explode(".", $fileName); + $fileExtension = strtolower(end($fileNameCmps)); + + $allowedfileExtensions = array('eml', 'txt'); + + if (in_array($fileExtension, $allowedfileExtensions)) { + $emailContent = file_get_contents($fileTmpPath); + + if ($emailContent === false) { + header('Location: index.php?error=' . urlencode('Fehler beim Lesen der hochgeladenen Datei.')); + exit(); + } + + $headers = parseEmailHeaders($emailContent); + $phishingChecks = checkPhishing($headers, $emailContent); + + // Eine Vorschau des E-Mail-Inhalts für die Debugging-Zwecke + $fullEmailPreview = substr($emailContent, 0, 2000); // Max. 2000 Zeichen + + $result = [ + 'headers' => $headers, + 'phishing_check' => $phishingChecks, + 'full_email_preview' => $fullEmailPreview + ]; + + // Ergebnisse als JSON enkodieren und base64 enkodieren, um sie in der URL zu übergeben + $encodedResult = base64_encode(json_encode($result)); + header('Location: index.php?result=' . urlencode($encodedResult)); + exit(); + + } else { + header('Location: index.php?error=' . urlencode('Ungültiger Dateityp. Bitte laden Sie eine .eml- oder .txt-Datei hoch.')); + exit(); + } + } else { + header('Location: index.php?error=' . urlencode('Fehler beim Hochladen der Datei: ' . $_FILES['email_file']['error'])); + exit(); + } +} else { + header('Location: index.php'); + exit(); +} +?> \ No newline at end of file