Keine Berechtigung.

'; return; } $pdo = get_db(); vt_ensure_schema(); $message = ''; $messageType = 'success'; if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') { verify_csrf(); $action = (string) ($_POST['action'] ?? ''); $id = (int) ($_POST['id'] ?? 0); if ($action === 'save') { $keyIn = trim((string) ($_POST['key'] ?? '')); if ($keyIn !== '' && !preg_match('/^[a-f0-9]{64}$/i', $keyIn)) { $message = 'Der VirusTotal-Schlüssel besteht aus 64 Zeichen (0–9, a–f).'; $messageType = 'error'; } else { if ($keyIn !== '') plugin_set_setting(VT, 'key_enc', encrypt_secret($keyIn)); if (!empty($_POST['clear_key'])) plugin_set_setting(VT, 'key_enc', ''); plugin_set_setting(VT, 'threshold', (string) max(1, min(30, (int) ($_POST['threshold'] ?? 3)))); plugin_set_setting(VT, 'unknown', ($_POST['unknown'] ?? 'hold') === 'allow' ? 'allow' : 'hold'); plugin_set_setting(VT, 'on_error', ($_POST['on_error'] ?? 'hold') === 'allow' ? 'allow' : 'hold'); plugin_set_setting(VT, 'upload', !empty($_POST['upload']) ? '1' : '0'); plugin_set_setting(VT, 'notify', !empty($_POST['notify']) ? '1' : '0'); audit_log((int) $staff['id'], 'VirusTotal: Einstellungen geändert' . (!empty($_POST['upload']) ? ' (Upload unbekannter Dateien an)' : '')); $message = 'Gespeichert.'; } } elseif ($action === 'test') { $t = vt_test_key(vt_config()['key'], vt_config()['threshold']); $message = $t['message']; $messageType = $t['ok'] ? 'success' : 'error'; } elseif ($action === 'release' && $id > 0) { $ok = vt_release_manual($pdo, $id); if ($ok) audit_log((int) $staff['id'], 'VirusTotal: Anhang #' . $id . ' von Hand freigegeben'); $message = $ok ? 'Die Datei ist freigegeben.' : 'Die Datei ließ sich nicht freigeben.'; $messageType = $ok ? 'success' : 'error'; } elseif ($action === 'delete' && $id > 0) { $ok = vt_delete($pdo, $id); if ($ok) audit_log((int) $staff['id'], 'VirusTotal: Anhang #' . $id . ' gelöscht'); $message = $ok ? 'Die Datei ist gelöscht.' : 'Die Datei ließ sich nicht löschen.'; $messageType = $ok ? 'success' : 'error'; } elseif ($action === 'recheck' && $id > 0) { $ok = vt_recheck($pdo, $id); $message = $ok ? 'Die Datei wird beim nächsten Lauf noch einmal geprüft.' : 'Das ging nicht.'; $messageType = $ok ? 'success' : 'error'; } } $cfg = vt_config(); $stats = vt_stats($pdo); $used = vt_day_used(); $lastError = (string) plugin_setting(VT, 'last_error', ''); $lastRun = (string) plugin_setting(VT, 'last_run', ''); $held = $pdo->query("SELECT f.*, t.ticket_number FROM plugin_virustotal_files f LEFT JOIN tickets t ON t.id = f.ticket_id WHERE f.status IN ('pending','analyzing','unknown','error','bad') ORDER BY (CASE f.status WHEN 'bad' THEN 0 WHEN 'unknown' THEN 1 WHEN 'error' THEN 2 ELSE 3 END), f.id DESC LIMIT 100")->fetchAll(); $recent = $pdo->query("SELECT * FROM plugin_virustotal_files WHERE status IN ('clean','released','deleted') ORDER BY id DESC LIMIT 30")->fetchAll(); $labels = ['pending' => ['Wartet auf VirusTotal', '#b45309'], 'analyzing' => ['Wird bei VirusTotal analysiert', '#b45309'], 'unknown' => ['Unbekannt (zurückgehalten)', '#b45309'], 'error' => ['Fehler (zurückgehalten)', '#b91c1c'], 'bad' => ['Gesperrt (Schadsoftware)', '#b91c1c'], 'clean' => ['Sauber, freigegeben', '#15803d'], 'released' => ['Von Hand freigegeben', '#15803d'], 'deleted' => ['Gelöscht', '#64748b']]; $mb = fn($b) => $b >= 1048576 ? round($b / 1048576, 1) . ' MB' : max(1, (int) round($b / 1024)) . ' KB'; ?>

VirusTotal

Zustand

Noch kein Schlüssel. Ohne VirusTotal-Schlüssel werden Anhänge nicht zurückgehalten und nicht geprüft. Einen kostenlosen Schlüssel gibt es nach der Anmeldung bei virustotal.com im Profil unter „API Key“.

✓ Aktiv. Neue Anhänge sind gesperrt, bis VirusTotal sie geprüft hat.

warten · gesperrt · unbekannt · mit Fehler · freigegeben

Abfragen heute: von (der kostenlose Schlüssel erlaubt 4 pro Minute und 500 pro Tag). Letzter Lauf: .

Vorgehen: Jeder neue Anhang wird sofort zurückgehalten (nicht herunterladbar). Dann fragt das Plugin bei VirusTotal nur den Fingerabdruck (SHA-256) der Datei ab. Ist die Datei bekannt und sauber, wird sie freigegeben; melden mindestens Scanner Schadsoftware, bleibt sie gesperrt. Anhänge, die schon vor dem Einschalten da waren, bleiben unberührt.

Einstellungen

Schlüssel testen

Fragt bei VirusTotal den Fingerabdruck der Standard-Testdatei (EICAR) ab. Es wird nichts hochgeladen. Vorher speichern.

Zurückgehaltene und gesperrte Anhänge

Nichts zurückgehalten.

DateiTicketGrößeZustandHinweis
#
>

Zuletzt geprüft

Noch nichts geprüft.

DateiZustandErgebnisWann