Dokumentation · Technische Dokumentation

Sicherheit und Berechtigungen

Dieses Dokument beschreibt das Sicherheitsmodell des ADP Car Market Hub-Plugins: welche WordPress-Berechtigungen und -Rollen es einführt, wie seine Admin- und AJAX-Schnittstellen geschützt sind und welchen Prinzipien es bei der Verarbeitung von Eingaben und externen Anfragen folgt.

Wann dieses Dokument zu verwenden ist

Lesen Sie dieses Dokument, wenn Sie Folgendes tun müssen:

  • Entscheiden, welche WordPress-Rolle Sie einem Händler oder Redakteur zuweisen möchten.
  • Überprüfen, wer Einstellungen einsehen, bearbeiten, importieren oder ändern darf.
  • Eine benutzerdefinierte Rolle hinzufügen, die in der Lage sein soll, Fahrzeugdaten zu verwalten, ohne vollständiger Administrator zu sein.
  • Die Sicherheitsstruktur der HTTP- und AJAX-Schnittstellen des Plugins überprüfen.

Details zu Berechtigungen und Nonces pro Endpunkt finden Sie unter REST-API-Endpunkte und AJAX-Aktionen.

Übersicht

Das Plugin schichtet zwei unabhängige Berechtigungssysteme:

  1. Benutzerdefinierte CPT-Berechtigungen für as24ci_car-Beiträge (granulare Lese-/Bearbeitungs-/Veröffentlichungs-/Löschberechtigungen).
  2. Eine pluginweite Verwaltungsberechtigung (manage_as24_imports), die die Importer-Admin-Seiten, die Import-/Queue-Trigger, das Löschen von Analysedaten, den Lead-Workflow und die Administration des KI-Assistenten schützt.

Eine dedizierte Rolle, as24ci_editor („AS24 Editor“), wird bei der Aktivierung erstellt. Sie erhält alle CPT-Berechtigungen, aber nicht manage_as24_imports, was es ihr ermöglicht, Fahrzeuge zu pflegen, ohne die Importer-Einstellungen zu verändern.

Berechtigungsreferenz

Plugin-Verwaltungsberechtigung

BerechtigungZweck
manage_as24_importsErforderlich für Importer-Admin-Tabs, Import-/Queue-Trigger, Batch-Assistent, Lead-Workflow-Updates, Löschen von Analysedaten, KI-Assistent-Admin und Support-Tab. Wird der Rolle administrator bei der Aktivierung zugewiesen.

Benutzerdefinierte Inhaltstyp-Berechtigungen (as24ci_car)

Das Plugin ordnet die folgenden Meta- und primitiven Berechtigungen zu:

  • Singuläre Meta-Berechtigungen: read_as24ci_car, edit_as24ci_car, delete_as24ci_car.
  • Plurale primitive Berechtigungen: read_private_as24ci_cars, edit_as24ci_cars, edit_others_as24ci_cars, edit_published_as24ci_cars, publish_as24ci_cars, delete_as24ci_cars, delete_others_as24ci_cars, delete_published_as24ci_cars.

Sowohl der Rolle administrator als auch der Rolle as24ci_editor werden bei der Aktivierung alle oben genannten Berechtigungen zugewiesen. Die standardmäßige WordPress editor-Rolle erhält diese Berechtigungen standardmäßig nicht.

Vom Plugin erstellte Rollen

  • as24ci_editor — wird bei der Aktivierung mit der Bezeichnung AS24 Editor erstellt. Beginnt mit der Berechtigung read und erhält dann alle as24ci_car-CPT-Berechtigungen. Erhält nicht manage_as24_imports.
  • administrator — erhält alle as24ci_car-CPT-Berechtigungen und manage_as24_imports. Die Rolle selbst wird nicht vom Plugin erstellt (sie ist Teil von WordPress).

Die Option as24ci_caps_version zeichnet die Version des Berechtigungsschemas auf, sodass zukünftige Plugin-Updates bestehenden Rollen neue Berechtigungen ohne manuelle Reaktivierung hinzufügen können.

Sicherheitsmuster für Admin und AJAX

Jeder Admin-AJAX-Handler im Plugin folgt demselben Muster:

  1. Berechtigung über current_user_can( CAP_MANAGE ) überprüfen. Bei Fehlschlag mit HTTP 403 antworten und abbrechen.
  2. Den Nonce über check_ajax_referer( <action>, 'nonce' ) überprüfen.
  3. Eingaben bereinigen (absint, sanitize_key, sanitize_text_field, etc.).
  4. Die Arbeit ausführen.
  5. wp_send_json_success() oder wp_send_json_error() zurückgeben.

Für Nonces und Berechtigungsanforderungen pro Aktion siehe AJAX-Aktionen.

REST- und Webhook-Sicherheit

  • Die optionalen öffentlichen Fahrzeug-Endpunkte (GET /as24ci/v1/vehicles[*]) werden nur registriert, wenn die Option as24ci_rest_api_enabled gleich '1' ist.
  • Der Cron-Import-Endpunkt (GET /as24ci/v1/cron-import) erfordert ein in as24ci_cron_token gespeichertes Token. Der Token-Vergleich verwendet hash_equals(), um Timing-Angriffe zu verhindern. Bevorzugen Sie den Header Authorization: Bearer <token> gegenüber dem Query-String-Fallback, damit das Token nicht in den Zugriffsprotokollen gespeichert wird.
  • Die Favoriten- und Analyse-Endpunkte sind standardmäßig öffentlich, damit anonyme Besucher sie nutzen können. Beide wenden eine Eingabevalidierung und Ratenbegrenzungs-Einschränkungen an (Favoriten sind auf 50 IDs pro Aufruf begrenzt; Analyse-Ereignisse müssen die erlaubten Ereignisnamen verwenden).
  • Ausgehende Webhooks signieren Payloads mit HMAC-SHA256 im Header X-AS24CI-Signature, wenn ein Shared Secret konfiguriert ist. Siehe Webhooks.

Eingabebehandlung und Maskierung

  • Formulareingaben werden über dedizierte Hilfsfunktionen bereinigt (sanitize_email, sanitize_text_field, sanitize_url, wp_kses_post für Nachrichtentexte, absint für IDs).
  • Die Ausgabe in Admin-Templates verwendet je nach Bedarf esc_html(), esc_attr(), esc_url() und wp_kses_post().
  • Der Datenbankzugriff verwendet $wpdb->prepare() für parametrisierte Abfragen; rohes SQL ist auf Schema-Operationen und dokumentierte phpcs-Ignorierungen im Quellcode beschränkt.

Schritt-für-Schritt-Anleitungen

Einem Nicht-Admin-Benutzer den Importer-Admin freigeben

  1. Bearbeiten Sie in WordPress das Benutzerprofil.
  2. Fügen Sie eine benutzerdefinierte Rolle hinzu (oder erweitern Sie den Benutzer) mit der Berechtigung manage_as24_imports.
  3. Speichern. Der Benutzer kann nun auf die Importer-Admin-Seiten zugreifen, Importe auslösen und Leads verwalten.

Fahrzeugerstellung ohne Importer-Zugriff erlauben

  1. Weisen Sie den Benutzer der vom Plugin erstellten Rolle as24ci_editor zu.
  2. Der Benutzer kann as24ci_car-Beiträge lesen, bearbeiten, veröffentlichen und löschen, kann jedoch nicht auf den Importer-Admin zugreifen oder Plugin-Einstellungen ändern.

Betriebshinweise

  • manage_as24_imports ist eine primitive Berechtigung der Rolle administrator. Das Entfernen dieser Berechtigung von Administratoren (beispielsweise mit einem benutzerdefinierten Benutzerverwaltungs-Plugin) sperrt alle Admins von den Importer- und Lead-Admin-Oberflächen aus.
  • Berechtigungszuweisungen werden bei der Aktivierung geschrieben. Wenn ein Benutzer eine Berechtigung nach der Aktivierung entfernt, wird sie nicht automatisch wiederhergestellt. Plugin-Upgrades, die eine neue Berechtigung einführen, führen die Zuweisung basierend auf der Option as24ci_caps_version erneut aus.
  • Das Plugin blockiert nicht die standardmäßigen WordPress-Anmelde- oder Passwort-Prozesse. Verwenden Sie eine starke Passwortrichtlinie und ziehen Sie eine Zwei-Faktor-Authentifizierung für Konten in Betracht, die manage_as24_imports besitzen.
  • Sensible Konfigurationen (API-Client-Zugangsdaten, Webhook-Geheimnisse, das Cron-Token) werden in wp_options gespeichert. Auf Installationen, die auf die Datenversion 5 migriert wurden, werden reversible Geheimnisse (as24ci_client_secret, as24ci_hub_api_key, as24ci_webhook_secret) über AS24CI\Secrets AES-256-GCM-verschlüsselt gespeichert, und das Cron-Token wird als Keyed-HMAC-Hash gespeichert. Datenbank-Backups sollten dennoch so behandelt werden, als enthielten sie Geheimnisse. Der vom KI-Assistenten verwendete verwaltete Gemini-API-Schlüssel wird Server-zu-Server von der API-Plattform bereitgestellt und verschlüsselt von AS24CI\Ai_Credential_Manager gehalten; er wird nicht als Klartext-WordPress-Option gespeichert oder in der Admin-Benutzeroberfläche offengelegt.
  • Das Kontaktformular bereinigt Eingaben und verwendet in einigen Abläufen ein Honeypot, aber das Plugin enthält kein CAPTCHA. Kombinieren Sie es mit einem Sicherheits- oder Antispam-Plugin, wenn Ihre Website angegriffen wird.

Fehlerbehebung

  • Permission denied. beim Auslösen eines Imports — dem Benutzer fehlt manage_as24_imports. Fügen Sie die Berechtigung der Rolle des Benutzers hinzu.
  • as24ci_editor-Benutzer können Fahrzeug-Beiträge nicht bearbeiten — überprüfen Sie, ob die Rolle ihre CPT-Berechtigungen behalten hat (einige Benutzerrollen-Manager entfernen Berechtigungen beim Ändern von Bezeichnungen). Reaktivieren Sie das Plugin, um die Berechtigungszuordnung erneut anzuwenden, oder führen Sie die entsprechenden WP-CLI-Befehle aus.
  • Cron-Import-Endpunkt gibt immer 403 zurück — es ist kein Token konfiguriert oder der angegebene Wert weicht ab. Generieren Sie ein neues Token im Admin-Tab Import & Limits.
  • REST /vehicles gibt 404 zurück — die öffentliche REST-API ist deaktiviert. Setzen Sie as24ci_rest_api_enabled auf '1'.
  • Webhook-Signaturen stimmen auf der Empfängerseite nicht überein — berechnen Sie diese auf der Empfängerseite neu, indem Sie den rohen, unveränderten Anfrage-Body und dasselbe Shared Secret verwenden. Siehe Webhooks.

Zugehörige Dokumente