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_importsfü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_referermit formularspezifischen Nonce-Aktionen. - Benutzerdefinierte Berechtigungen werden für den Post-Typ
as24ci_carmitmap_meta_cap = truegemappt, sodass Berechtigungen pro Beitrag dem WordPress-Meta-Cap-Mechanismus folgen.
REST-API-Oberfläche
- Die öffentlichen Fahrzeug-REST-Routen (
/wp-json/as24ci/v1/vehiclesund/wp-json/as24ci/v1/vehicles/{id}) werden nur registriert, wenn die Option Enable REST API aktiviert ist. Sie verwenden einepermission_callbackvon__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 mithash_equalsverglichen (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_tokenals 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_postgefiltert.
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
pendingaufactive; 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 leereindex.php-Datei geschützt. - Bevor jede Zeile geschrieben wird, wird die Nachricht bereinigt, um
token=…-,client_secret=…- undAuthorization: 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
.htaccessnicht berücksichtigen (Nginx, Caddy, IIS), hängt die Freigabe des Upload-Verzeichnisses von der Webserver-Konfiguration ab. Betreiber sollten sicherstellen, dass der direkte Zugriff aufwp-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_Configkonfiguriert 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.phpnicht 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_TOKENgegenü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_importsnur vertrauenswürdigen Benutzern. Standardmässig wird sie der Rolleadministratorhinzugefü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_importseinschrä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
- Bestätigen Sie, dass WordPress, das Plugin und alle anderen Plugins/Themes in ihren aktuellen stabilen Versionen vorliegen.
- Bestätigen Sie, dass die Website über HTTPS bereitgestellt wird und dass Admin-Sitzungen auf HTTPS beschränkt sind.
- Überprüfen Sie die WordPress-Benutzerliste und -Rollen. Entfernen Sie ungenutzte Konten.
- Bestätigen Sie, dass nur vertrauenswürdige Benutzer die Berechtigung
manage_as24_importsbesitzen. - Entscheiden Sie, ob die öffentlichen REST-Routen benötigt werden. Deaktivieren Sie andernfalls Enable REST API.
- Wenn der Cron-Endpunkt verwendet wird, generieren Sie ein langes, zufälliges Cron-Token und rufen Sie es über
Authorization: Bearer …über HTTPS auf. - Konfigurieren Sie die Empfänger-E-Mail und die Einwilligungseinstellungen des Lead-Formulars.
- Überprüfen Sie die Analytics-Einstellungen (standardmässig deaktiviert; falls aktiviert, legen Sie die Aufbewahrung und die Consent-Integration fest).
- Stellen Sie sicher, dass das Protokollverzeichnis auf Ihrem Webserver nicht öffentlich zugänglich ist.
- 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 tokenzurück – Überprüfen Sie, ob das Cron-Token im Plugin-Admin konfiguriert ist und ob der Aufrufer es korrekt überAuthorization: Beareroder?token=übergibt. - Cron-Endpunkt gibt
403 Cron token not configuredzurü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.