Dokumentation · Datenschutz, Sicherheit und Compliance

Sicherheitsempfehlungen

Dieses Dokument sammelt praktische Sicherheitsempfehlungen für Websites, auf denen das ADP Car Market Hub-Plugin läuft. Es konzentriert sich auf die betriebliche Härtung, die integrierten Schutzmassnahmen des Plugins und die Kontrollen, die Website-Betreiber zusätzlich zur Standard-WordPress-Härtung konfigurieren sollten.

Dieses Dokument ersetzt kein vollständiges Sicherheitsaudit und garantiert nicht, dass die Website frei von Schwachstellen ist. Website-Betreiber sollten ihr Hosting-Setup, die WordPress-Konfiguration und Drittanbieter-Integrationen gegebenenfalls mit einem qualifizierten Sicherheitsspezialisten überprüfen.

Wann Sie dieses Dokument verwenden sollten

Verwenden Sie dieses Dokument, wenn Sie:

  • Eine Website, die das Plugin verwendet, für den Live-Betrieb vorbereiten müssen.
  • Die integrierten Sicherheitskontrollen des Plugins überprüfen möchten.
  • Betriebliche Sicherheitsmassnahmen planen (Zugangsdaten, Cron, Protokollierung, Backups).
  • Auf eine interne Sicherheitsüberprüfung oder einen Fragebogen antworten müssen.

Übersicht

Das Plugin stützt sich auf Standard-WordPress-Sicherheitsprimitive:

  • WordPress-Berechtigungen (benutzerdefinierte Plugin-Berechtigung manage_as24_imports für Verwaltungsaktionen; CPT-spezifische Berechtigungen für Fahrzeug-Beiträge).
  • WordPress-Nonces bei jedem Admin-Formular, jeder AJAX-Aktion und jedem Admin-POST-Handler.
  • Standard-WordPress-Bereinigungs- und Maskierungs-Hilfsfunktionen (sanitize_*, wp_kses_post, esc_*, wp_unslash).
  • WordPress-Transients für kurzlebige Zustände (Rate Limits, Ausführungssperren).
  • Das vorhandene TLS der Website, den Login-Schutz, Dateiberechtigungen und die Datenbanksicherheit.

Das Plugin fügt diesen Primitiven mehrere funktionsspezifische Schutzmassnahmen hinzu, die im nächsten Abschnitt aufgeführt sind.

Integrierte Schutzmassnahmen

Die folgenden Verhaltensweisen spiegeln das wider, was der Plugin-Code aktuell implementiert. Überprüfen Sie diese in der aktuellen Plugin-Version, bevor Sie sich in formellen Sicherheitsdokumenten darauf verlassen.

Authentifizierung und Autorisierung

  • Admin-Seiten und POST-Handler überprüfen die Plugin-Verwaltungsberechtigung (manage_as24_imports), bevor sie eine Zustandsänderung verarbeiten.
  • Admin-AJAX-Endpunkte im Plugin verifizieren ein Nonce über check_ajax_referer.
  • Admin-Formularübermittlungen verwenden check_admin_referer mit formularspezifischen Nonce-Aktionen.
  • Benutzerdefinierte Berechtigungen werden für den Post-Typ as24ci_car mit map_meta_cap = true gemappt, sodass Berechtigungen pro Beitrag dem WordPress-Meta-Cap-Mechanismus folgen.

REST-API-Oberfläche

  • Die öffentlichen Fahrzeug-REST-Routen (/wp-json/as24ci/v1/vehicles und /wp-json/as24ci/v1/vehicles/{id}) werden nur registriert, wenn die Option Enable REST API aktiviert ist. Sie verwenden eine permission_callback von __return_true, was bedeutet, dass die zurückgegebenen Daten nur zum Lesen bestimmt sind. Deaktivieren Sie die Option, wenn Sie diese Oberfläche nicht freigeben möchten.
  • Der Cron-Import-Endpunkt (/wp-json/as24ci/v1/cron-import) registriert eine öffentliche Route, führt jedoch eine tokenbasierte Authentifizierung innerhalb des Callbacks durch. Das Token wird mit hash_equals verglichen (Konstantzeit-Vergleich) und ist bei jedem Aufruf erforderlich.
  • Das Cron-Token kann entweder als Authorization: Bearer-Header (bevorzugt – hält das Token aus den Zugriffsprotokollen fern) oder als ?token=-Query-Parameter übergeben werden.

Cron-Token

  • Das Cron-Token wird in den Import-Einstellungen des Plugins verwaltet und in der Option as24ci_cron_token als Einweg-HMAC-SHA256-Hash gespeichert, sodass der Klartext nicht aus einem Datenbank-Dump wiederhergestellt werden kann. Der Klartextwert ist in der Admin-Benutzeroberfläche nur für ein kurzes Anzeigefenster (ca. 15 Minuten) unmittelbar nach der Generierung oder Neugenerierung des Tokens verfügbar; nach diesem Fenster kann der Administrator nur ein neues Token generieren, nicht aber das vorherige anzeigen.
  • Der Endpunkt verweigert Anfragen, wenn kein Token konfiguriert ist.

Missbrauchsschutz für Kontaktformulare

  • Jede Übermittlung muss das as24ci_contact_form-Nonce tragen.
  • Ein verstecktes website-Honeypot-Feld lehnt automatisierte Übermittlungen stillschweigend ab, ohne einen sichtbaren Fehler zu erzeugen.
  • Ein Rate Limit von 5 Übermittlungen pro IP und 5 Minuten wird über ein WordPress-Transient erzwungen. Die IP-Adresse wird vor der Verwendung mit wp_salt('auth') gehasht und nicht mit dem Lead gespeichert.
  • Das Nachrichtenfeld wird mit wp_kses_post gefiltert.

Suchabo-Tokens

  • Jedes Abonnement verfügt über ein kryptografisch zufälliges 64-Zeichen-Token, das sowohl für den Bestätigungslink als auch für den Abmeldelink verwendet wird.
  • Die Bestätigung ändert den Status einer Zeile lediglich von pending auf active; nachfolgende Verwendungen ändern den Status nicht erneut.

Logger und Maskierung von Geheimnissen

  • Der Logger des Plugins schreibt in eine Datei in einem dedizierten Unterverzeichnis des WordPress-Upload-Ordners (as24ci-logs/).
  • Bei der Erstellung wird das Verzeichnis durch eine .htaccess-Datei, die jeglichen Zugriff verweigert (nur Apache), und eine leere index.php-Datei geschützt.
  • Bevor jede Zeile geschrieben wird, wird die Nachricht bereinigt, um token=…-, client_secret=…- und Authorization: Bearer …-Fragmente zu maskieren (Defense in Depth).
  • Protokolle rotieren bei 10 MB, und rotierte Dateien, die älter als 7 Tage sind, werden automatisch gelöscht.
  • Auf Servern, die .htaccess nicht berücksichtigen (Nginx, Caddy, IIS), hängt die Freigabe des Upload-Verzeichnisses von der Webserver-Konfiguration ab. Betreiber sollten sicherstellen, dass der direkte Zugriff auf wp-content/uploads/as24ci-logs/ auf solchen Servern blockiert ist.

Daten bei Deinstallation

  • Die Tabellen für Analytics und Suchaufträge werden bei der Deinstallation bedingungslos gelöscht, sodass Besucher-Tracking-Daten und E-Mail-Adressen von Abonnenten nach dem Entfernen des Plugins nicht bestehen bleiben.
  • Die optionale Einstellung Delete data on uninstall entfernt auch Fahrzeug-Beiträge, Lead-Beiträge, Plugin-Seiten und importierte Anhänge.

Empfohlene Massnahmen für Betreiber

Die folgenden Empfehlungen kombinieren die Standard-WordPress-Härtung mit der pluginspezifischen Konfiguration.

Zugangsdaten und Geheimnisse

  • Behandeln Sie das AutoScout24-API-Client-Secret und das Cron-Token als sensible Geheimnisse. Sie werden als WordPress-Optionen gespeichert, sind aber im Ruhezustand durch den zentralen Geheimnis-Helfer des Plugins geschützt: Das Client-Secret wird mit authentifiziertem AES-256-GCM verschlüsselt (Schlüssel abgeleitet aus den WordPress-Salts via HKDF-SHA256), und das Cron-Token wird als Einweg-HMAC-SHA256-Hash gespeichert, sodass der Klartext nicht aus einem Datenbank-Dump wiederhergestellt werden kann. Die standardmässige WordPress-Datenbankhärtung gilt weiterhin. Der verwaltete Gemini-API-Schlüssel, der vom AI Assistant verwendet wird, wird von AD Promotion in AS24CI\Ai_Config konfiguriert und nicht als WordPress-Option gespeichert oder in der Admin-Benutzeroberfläche angezeigt.
  • Beschränken Sie den Datenbankzugriff auf Administratoren und stellen Sie sicher, dass wp-config.php nicht weltweit lesbar ist.
  • Rotieren Sie das Cron-Token, wenn Grund zur Annahme besteht, dass es offengelegt wurde (beispielsweise durch Zugriffsprotokolle, die den Query-Parameter ?token= aufgezeichnet haben).

REST- und Cron-Endpunkt

  • Deaktivieren Sie Enable REST API, wenn Sie die öffentlichen Fahrzeug-Endpunkte nicht freigeben müssen.
  • Wenn Sie den integrierten Cron-Endpunkt verwenden, bevorzugen Sie Authorization: Bearer YOUR_TOKEN gegenüber ?token=…, damit das Geheimnis nicht in den Zugriffsprotokollen des Webservers erscheint.
  • Verwenden Sie HTTPS für jeden externen Scheduler, der den Cron-Endpunkt aufruft.
  • Bevorzugen Sie auf Live-Websites einen zuverlässigen System-Cron, der WP-Cron auslöst, gegenüber dem standardmässigen Pseudo-Cron-Verhalten.

Rollen und Berechtigungen

  • Gewähren Sie die Berechtigung manage_as24_imports nur vertrauenswürdigen Benutzern. Standardmässig wird sie der Rolle administrator hinzugefügt.
  • Verwenden Sie die Plugin-Rolle as24ci_editor (oder eine vergleichbare benutzerdefinierte Konfiguration) für Mitarbeiter, die nur Fahrzeug-Beiträge und nicht die Plugin-Einstellungen verwalten müssen. Siehe Access Control and Capabilities.

Datenschutz und Analytics

  • Lassen Sie Analytics deaktiviert, bis Sie eine dokumentierte Rechtsgrundlage oder eine Consent-Integration eingerichtet haben. Siehe GDPR / DSGVO Notes und revDSG Notes.
  • Halten Sie Filter data minimization aktiviert.
  • Stellen Sie das Aufbewahrungsfenster für Analytics auf den niedrigsten Wert ein, der mit Ihren betrieblichen Anforderungen vereinbar ist (mindestens 7 Tage).

Formulare und Lead-Verarbeitung

  • Halten Sie optionale Felder (Telefon, Nachricht) ausgeblendet, wenn Sie diese nicht benötigen.
  • Konfigurieren Sie den Empfänger der Lead-Benachrichtigungs-E-Mail und überprüfen Sie, ob es sich um ein kontrolliertes Postfach handelt.
  • Erwägen Sie ein SMTP-Plugin und die SPF/DKIM/DMARC-Ausrichtung, um das Risiko zu verringern, dass Anfrage-E-Mails als Spam gefiltert werden.
  • Löschen Sie Leads regelmässig, wenn sie für legitime Geschäftszwecke nicht mehr benötigt werden.

AI Assistant-Funktion

  • Der AI Assistant verwendet die verwaltete Google Gemini-Konfiguration in ADP Car Market Hub. Im WordPress-Backend ist keine Auswahl des Anbieters, des Modells oder die Eingabe eines API-Schlüssels erforderlich; die kundenspezifische AI-Bereitstellung wird nach der Installation durch AD Promotion abgeschlossen. Prompts werden über HTTPS an den verwalteten Gemini-Endpunkt gesendet.
  • Schränken Sie ein, wer den AI Assistant konfigurieren darf, indem Sie die Berechtigung manage_as24_imports einschränken.
  • Überprüfen Sie die geltenden Datenverarbeitungs- und Vertragsbedingungen für das verwaltete AI-Setup, bevor Sie AI-Funktionen im Live-Betrieb aktivieren.

Dateisystem und Uploads

  • Stellen Sie sicher, dass das Verzeichnis WordPress auf Ihrem Webserver nicht aufgelistet werden kann (Directory Listing).
  • Bestätigen Sie auf Nicht-Apache-Servern (Nginx, Caddy, IIS), dass wp-content/uploads/as24ci-logs/ nicht öffentlich zugänglich ist. Das Plugin schreibt zum Schutz auf Apache eine .htaccess; auf anderen Servern müssen Betreiber eine entsprechende Regel hinzufügen.
  • Halten Sie PHP, WordPress, Themes und andere Plugins auf dem neuesten Stand.

Backups und Reaktion auf Vorfälle

  • Sichern Sie die WordPress-Datenbank in regelmässigen Backups; dies erfasst Fahrzeug-Beiträge, Leads, Analytics und Suchabo-Daten.
  • Testen Sie die Wiederherstellung von Backups regelmässig.
  • Dokumentieren Sie einen Notfallplan (Incident Response), einschliesslich der Deaktivierung des Cron-Endpunkts (Löschen des Cron-Tokens) und des Widerrufs des API-Client-Secrets. Um AI-Funktionen zu deaktivieren, deaktivieren Sie den AI Assistant im Admin-Tab AI Assistant; der verwaltete Gemini-Schlüssel wird von AD Promotion verwaltet und rotiert.

Schritt für Schritt: Sicherheits-Checkliste vor dem Live-Gang

  1. Bestätigen Sie, dass WordPress, das Plugin und alle anderen Plugins/Themes in ihren aktuellen stabilen Versionen vorliegen.
  2. Bestätigen Sie, dass die Website über HTTPS bereitgestellt wird und dass Admin-Sitzungen auf HTTPS beschränkt sind.
  3. Überprüfen Sie die WordPress-Benutzerliste und -Rollen. Entfernen Sie ungenutzte Konten.
  4. Bestätigen Sie, dass nur vertrauenswürdige Benutzer die Berechtigung manage_as24_imports besitzen.
  5. Entscheiden Sie, ob die öffentlichen REST-Routen benötigt werden. Deaktivieren Sie andernfalls Enable REST API.
  6. Wenn der Cron-Endpunkt verwendet wird, generieren Sie ein langes, zufälliges Cron-Token und rufen Sie es über Authorization: Bearer … über HTTPS auf.
  7. Konfigurieren Sie die Empfänger-E-Mail und die Einwilligungseinstellungen des Lead-Formulars.
  8. Überprüfen Sie die Analytics-Einstellungen (standardmässig deaktiviert; falls aktiviert, legen Sie die Aufbewahrung und die Consent-Integration fest).
  9. Stellen Sie sicher, dass das Protokollverzeichnis auf Ihrem Webserver nicht öffentlich zugänglich ist.
  10. Erstellen Sie ein Baseline-Backup, bevor Sie live gehen.

Fehlerbehebung

  • Öffentliche Benutzer können Admin-AJAX- oder Admin-POST-Handler aufrufen – Überprüfen Sie, ob Sie keine Debug-Hilfen ausführen, die Berechtigungen umgehen; die Handler des Plugins überprüfen bei jeder Anfrage sowohl die Berechtigung als auch das Nonce.
  • Cron-Endpunkt gibt 403 Invalid or missing token zurück – Überprüfen Sie, ob das Cron-Token im Plugin-Admin konfiguriert ist und ob der Aufrufer es korrekt über Authorization: Bearer oder ?token= übergibt.
  • Cron-Endpunkt gibt 403 Cron token not configured zurück – Öffnen Sie die Import-Einstellungen des Plugins und generieren / setzen Sie das Cron-Token.
  • Protokolle rotieren nicht – Bestätigen Sie, dass das Upload-Verzeichnis beschreibbar ist und dass WP-Cron läuft. Die Rotation wird regelmässig überprüft (beim ersten Aufruf und danach alle 100 Aufrufe).
  • Sensible Werte erscheinen in den Protokollen – Der Logger maskiert bekannte Muster. Wenn eine benutzerdefinierte Integration zusätzliche Geheimnisse protokolliert, aktualisieren Sie diese Integration, um sie an der Quelle zu maskieren.

Zugehörige Dokumente