Sicherer Datenaustausch über verschlüsselte JSON-Payloads Access ↔ WordPress

Worum geht’s?

Access sendet oder empfängt sensible Daten.
WordPress steht im Netz.
Zwischen beiden läuft ein JSON-basierter Austausch – aber bitte verschlüsselt.
Denn Klartext ist keine Option mehr. Auch nicht „nur intern“.

Ich zeige Dir, wie Du in beiden Richtungen verschlüsselte Payloads verarbeitest – mit überschaubarem Aufwand.

Warum nicht einfach HTTPS?

HTTPS schützt nur die Transportstrecke.
Nicht:

  • den Inhalt bei Speicherung im Log
  • den Zugriff durch fehlerhafte Plugins
  • die API bei Cross-Server-Integrationen

Deshalb: Payload selbst verschlüsseln.

Architekturüberblick

KomponenteAufgabe
AccessJSON bauen, AES verschlüsseln, senden
WordPressJSON entschlüsseln, verarbeiten, antworten
Gemeinsames Geheimnisz. B. AES-Schlüssel (256 Bit)

Wir reden hier nicht über asymmetrische Kryptografie.
AES reicht – wenn Du den Schlüssel sicher aufbewahrst.

Schritt 1: AES-Verschlüsselung in Access (VBA)

VBA kann kein AES nativ.
Aber über CAPICOM oder Windows Crypto API klappt’s.

Beispiel mit CAPICOM:

Public Function VerschlüsselnAES(payload As String, key As String) As String
    Dim crypto As Object
    Set crypto = CreateObject("CAPICOM.EncryptedData")

    crypto.Algorithm.Name = 4 ' CAPICOM_ENCRYPTION_ALGORITHM_AES
    crypto.Algorithm.KeyLength = 3 ' 256 Bit
    crypto.SetSecret key
    crypto.Content = payload

    VerschlüsselnAES = crypto.Encrypt(1) ' Base64
End Function

Achtung: CAPICOM muss registriert sein.
Sonst nimm ein kleines COM-DLL-Wrapper-Modul.

Schritt 2: Senden der Payload aus Access

Public Sub SendeVerschlüsselt()
    Dim json As String, verschlüsselt As String, http As Object

    json = "{""id"":123,""status"":""ok""}"
    verschlüsselt = VerschlüsselnAES(json, "geheimespasswort123!")

    Set http = CreateObject("MSXML2.XMLHTTP")
    http.Open "POST", "https://deinserver.de/wp-json/secureapi/v1/empfang", False
    http.setRequestHeader "Content-Type", "application/json"
    http.Send "{""data"":""" & verschlüsselt & """}"
End Sub

Schritt 3: Entschlüsselung in WordPress (PHP)

Du brauchst openssl_decrypt() mit AES-256-CBC.
Nutze Base64-Encoding zum Transport.

function decrypt_payload($encrypted, $key) {
    $data = base64_decode($encrypted);
    $iv = substr($data, 0, 16);
    $ciphertext = substr($data, 16);
    return openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
}

Empfangene Payload verarbeiten:

add_action('rest_api_init', function () {
    register_rest_route('secureapi/v1', '/empfang', [
        'methods' => 'POST',
        'callback' => 'verarbeite_payload',
        'permission_callback' => '__return_true'
    ]);
});

function verarbeite_payload($req) {
    $input = $req->get_json_params();
    $payload = decrypt_payload($input['data'], 'geheimespasswort123!');

    $daten = json_decode($payload, true);

    // Weiterverarbeitung
    return ['status' => 'ok', 'empfangen' => $daten];
}

Tipp: Nutze immer einen IV (Initialisierungsvektor) – am besten random mitgesendet.
Im Beispiel: IV steht vorne in der Base64-Zeichenkette.

Rückweg: WordPress → Access

Gleiches Prinzip – nur umgekehrt.
Die Antwort wird verschlüsselt zurückgegeben.
Access entschlüsselt sie wie im ersten Schritt.

Sicherheit beachten

  • Schlüssel nie im Quelltext speichern
  • IV pro Nachricht zufällig erzeugen
  • Kein ECB-Modus
  • Keine Klartext-Logs
  • Kein JSON mit sensiblen Feldern unverschlüsselt speichern

Alternativen

  • Asymmetrische Verschlüsselung mit RSA (z. B. über OpenSSL CLI oder Node.js API-Gateway)
  • Hash-Verifikation (HMAC) für Integrität
  • Microsoft Graph/Power Automate als Proxy (falls MS365)

Aber: Für viele KMU reicht AES im Shared-Secret-Verfahren.
Einfach, nachvollziehbar, wartbar.

Mein Fazit

REST und JSON sind schnell gebaut.
Aber erst mit Payload-Verschlüsselung wird daraus ein echtes System für sensible Daten.
Mit Access und WordPress geht das – man muss nur wissen, wie.
Und das Schaf? Das verschlüsselt immer – und meckert, wenn Du’s nicht tust.

Kategorien: