REST-API-Security: Grundlagen für produktive Endpunkte
OWASP
0x00
Security · REST API · Authentifizierung · Magento 2
REST-API-Security: Grundlagen für produktive Endpunkte
Von Authentifizierung bis Rate Limiting richtig absichern

Wer REST-Endpunkte in Magento und PHP-Anwendungen produktiv betreibt, muss Authentifizierung strikt von Autorisierung trennen, Mass Assignment verhindern, Statuscodes ohne Informationslecks zurückgeben und eine tragfähige Versionierung planen. Dieser Artikel zeigt praxisnahe Techniken für Magento webapi.xml ACL Konfiguration, konsequente Eingabevalidierung, Rate Limiting und Monitoring, damit produktive Endpunkte auch unter Last und gezielten Angriffen sicher und wartbar bleiben.

16 Min. Lesezeit Authentifizierung · Autorisierung · ACL Magento 2.4.8 · webapi.xml · REST API

1. Warum REST-API-Security über Produktionsreife entscheidet

Jeder REST-Endpunkt, der aus dem Internet erreichbar ist, ist eine eigenständige Angriffsfläche, unabhängig davon, ob er von einer Storefront, einer mobilen App oder einem B2B-Integrationspartner aufgerufen wird. Der OWASP API Security Top 10 Katalog zeigt seit Jahren, dass die häufigsten Schwachstellen nicht in exotischer Kryptografie liegen, sondern in banalen Designfehlern: fehlende Objektebenen-Autorisierung, ungeprüfte Eingaben und zu freizügige Datenmodelle. Magentos webapi.xml-Framework macht das Anlegen neuer Endpunkte technisch einfach, verschiebt die Verantwortung für korrekte Absicherung aber vollständig auf das Entwicklungsteam.

Ein unsicherer Endpunkt bleibt selten lange unentdeckt: automatisierte Scanner testen öffentliche APIs systematisch auf bekannte Muster wie ungeschützte IDs in URLs oder fehlende Ratenbegrenzung. Die Folgen reichen von Datenabfluss über DSGVO-relevante Meldepflichten bis zu Reputationsschäden, die den Vertrauensverlust bei B2B-Partnern nach sich ziehen. Wer REST-API-Security von Anfang an mitdenkt, spart sich nicht nur Incident-Response-Aufwand, sondern vermeidet auch teure nachträgliche Breaking Changes an produktiven Schnittstellen, die bereits von Drittsystemen konsumiert werden.

2. Authentifizierung vs. Autorisierung auf API-Ebene

Authentifizierung beantwortet die Frage, wer einen Request stellt, meist über ein Bearer-Token, einen OAuth-Access-Token oder Signed Requests. Autorisierung beantwortet die davon unabhängige Frage, ob dieser bereits authentifizierte Aufrufer die angeforderte Aktion auf genau dieser Ressource ausführen darf. Der häufigste Fehler in produktiven APIs: Ein gültiges Token wird als ausreichender Nachweis für jede Aktion akzeptiert, ohne zu prüfen, ob der Token-Inhaber tatsächlich Eigentümer der angefragten Ressource ist. Dieses Muster ist als Broken Object Level Authorization (BOLA) die konstant am häufigsten ausgenutzte Schwachstellenklasse in der OWASP-API-Statistik.

In Magento zeigt sich das konkret bei Customer-Endpunkten: Ein gültiges Kundentoken authentifiziert zuverlässig, dass der Aufrufer ein eingeloggter Kunde ist, sagt aber nichts darüber aus, ob die angefragte Bestellung ihm gehört. Der resource="self"-Mechanismus in webapi.xml deckt Standardfälle ab, doch bei individuellen Service-Implementierungen muss die Eigentümerprüfung explizit im Servicecode erfolgen, üblicherweise durch Abgleich der Customer-ID aus dem Token mit der Customer-ID des angefragten Datensatzes, bevor irgendeine Geschäftslogik ausgeführt wird.

3. Mass Assignment vermeiden: DTOs statt offener Hydration

Mass Assignment entsteht, wenn ein Request-Body ungefiltert auf ein Datenmodell übertragen wird, etwa per setData($requestArray) oder einer generischen Hydration-Methode. Enthält das Zielmodell Felder wie is_admin, group_id oder customer_group_id, die eigentlich nur intern gesetzt werden sollen, kann ein Angreifer diese Felder einfach im JSON-Body mitschicken und so Berechtigungen oder Preise manipulieren, ohne dass eine einzige explizite Autorisierungsprüfung umgangen werden muss. Diese Schwachstellenklasse betrifft nicht nur Custom-Module, sondern auch schlecht gekapselte Erweiterungen bestehender Magento-Endpunkte.

Die zuverlässige Gegenmaßnahme ist eine Allow-List statt einer Deny-List: Ein explizites Data Transfer Object mit typisierten Konstruktor-Parametern oder benannten Settern akzeptiert ausschließlich die Felder, die tatsächlich vom Client gesetzt werden dürfen. Magentos Service-Contract-Pattern mit generierten Data-Interfaces unterstützt dieses Vorgehen strukturell, solange Entwickler der Versuchung widerstehen, Extension Attributes oder zusätzliche Setter unreflektiert für Felder zu öffnen, die eigentlich serverseitig kontrolliert bleiben müssen.


<?php

declare(strict_types=1);

namespace Mironsoft\Security\Api\Data;

/**
 * Explicit DTO for customer profile updates via REST.
 * Only fields listed here can ever be set from the request body,
 * which prevents mass assignment of sensitive fields like
 * customer_group_id or is_subscribed_to_newsletter_blacklist.
 */
interface CustomerProfileUpdateInterface
{
    public function getFirstname(): string;

    public function getLastname(): string;

    public function getTelephone(): ?string;

    public function setFirstname(string $firstname): self;

    public function setLastname(string $lastname): self;

    public function setTelephone(?string $telephone): self;
}

<?php

declare(strict_types=1);

namespace Mironsoft\Security\Model;

use Mironsoft\Security\Api\Data\CustomerProfileUpdateInterface;
use Magento\Customer\Api\CustomerRepositoryInterface;

/**
 * Applies a validated DTO to the customer entity instead of
 * hydrating the model directly from the raw request array.
 */
class CustomerProfileUpdater
{
    public function __construct(
        private readonly CustomerRepositoryInterface $customerRepository
    ) {
    }

    /**
     * Updates only the explicitly allowed fields on the customer entity.
     *
     * @param int $customerId
     * @param CustomerProfileUpdateInterface $update
     */
    public function execute(int $customerId, CustomerProfileUpdateInterface $update): void
    {
        $customer = $this->customerRepository->getById($customerId);

        // Only whitelisted setters are called, never a bulk setData().
        $customer->setFirstname($update->getFirstname());
        $customer->setLastname($update->getLastname());

        if ($update->getTelephone() !== null) {
            $customer->setCustomAttribute('telephone', $update->getTelephone());
        }

        $this->customerRepository->save($customer);
    }
}

4. HTTP-Statuscodes ohne Informationslecks

HTTP-Statuscodes sind kein reines Detail der Fehlerbehandlung, sondern ein Kommunikationskanal, der bei falscher Nutzung sensible Informationen preisgibt. Ein klassisches Beispiel ist die Unterscheidung zwischen 401 Unauthorized und 404 Not Found bei einem Login-Versuch: Antwortet die API bei falschem Passwort mit einer anderen Fehlermeldung als bei einer nicht existierenden E-Mail-Adresse, kann ein Angreifer per Brute-Force-Enumeration gültige Konten identifizieren, bevor überhaupt ein Passwort geraten wird. Die korrekte Praxis ist eine einheitliche, generische Antwort für beide Fälle.

Ebenso kritisch ist der Umgang mit 500 Internal Server Error in produktiven Umgebungen: Magentos Entwicklermodus gibt bei unbehandelten Exceptions Stacktraces mit Klassennamen, Dateipfaden und teils sogar Datenbankfehlermeldungen zurück. Im production-Modus muss diese Detailtiefe zwingend unterdrückt werden, üblicherweise durch eine zentrale Exception-Behandlung, die technische Details ins Log schreibt, dem Client aber nur eine generische Fehlermeldung mit stabiler Fehler-ID liefert. Auch 403 Forbidden gegenüber 404 Not Found verdient bewusste Entscheidung: Wer die Existenz einer fremden Ressource nicht bestätigen will, antwortet bei fehlender Berechtigung ebenfalls mit 404 statt 403.


<?php

declare(strict_types=1);

namespace Mironsoft\Security\Model\Exception;

use Magento\Framework\Webapi\Exception as WebapiException;
use Magento\Framework\Phrase;

/**
 * Central handler that maps internal exceptions to a generic
 * client-facing message, while the full detail is only logged
 * internally with a correlation ID for later investigation.
 */
class SafeApiExceptionMapper
{
    public function __construct(
        private readonly \Psr\Log\LoggerInterface $logger
    ) {
    }

    /**
     * Converts any caught throwable into a safe WebapiException.
     *
     * @param \Throwable $exception
     * @return WebapiException
     */
    public function toWebapiException(\Throwable $exception): WebapiException
    {
        $correlationId = bin2hex(random_bytes(8));

        // Full detail stays server side only, never in the HTTP response.
        $this->logger->error(sprintf(
            '[%s] %s in %s:%d',
            $correlationId,
            $exception->getMessage(),
            $exception->getFile(),
            $exception->getLine()
        ));

        return new WebapiException(
            new Phrase('An unexpected error occurred. Reference: %1', [$correlationId]),
            0,
            WebapiException::HTTP_INTERNAL_ERROR
        );
    }
}

5. Versionierungsstrategie für sichere Deprecation

Sicherheitslücken lassen sich nicht immer rückwärtskompatibel schließen: Manchmal erfordert eine Korrektur eine Änderung des Response-Formats, eine strengere Validierung, die bisher akzeptierte Payloads ablehnt, oder eine komplett neue Autorisierungslogik. Ohne Versionierungsstrategie zwingt jede dieser Änderungen entweder zu einem riskanten Breaking Change im laufenden Betrieb oder dazu, die unsichere Logik aus Kompatibilitätsgründen dauerhaft beizubehalten. Magentos webapi.xml unterstützt URI-Versionierung über das Route-Präfix, sodass /V1/ und /V2/ parallel existieren können, während Clients kontrolliert migriert werden.

Eine tragfähige Strategie kombiniert drei Elemente: einen klar kommunizierten Deprecation-Zeitraum, einen Sunset-HTTP-Header auf der alten Version, der das Abschaltdatum maschinenlesbar ankündigt, und aktives Monitoring der Zugriffe auf die veraltete Route, um zu erkennen, welche Clients noch nicht migriert haben. Erst wenn die Zugriffszahlen auf die alte Version nachweislich gegen null gehen oder die Frist abgelaufen ist, wird die unsichere Version tatsächlich deaktiviert, nicht nur dokumentiert als veraltet.


<!-- webapi.xml: parallel versions to allow a controlled, secure migration -->
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">

    <!-- Deprecated route: accepts a legacy payload shape, kept only
         for backward compatibility during the sunset period -->
    <route url="/V1/mironsoft/orders/:id/notes" method="POST">
        <service class="Mironsoft\Security\Api\OrderNoteV1Interface" method="add"/>
        <resources>
            <resource ref="self"/>
        </resources>
    </route>

    <!-- Current, hardened route: strict DTO validation and
         explicit object-level ownership check -->
    <route url="/V2/mironsoft/orders/:id/notes" method="POST">
        <service class="Mironsoft\Security\Api\OrderNoteV2Interface" method="add"/>
        <resources>
            <resource ref="self"/>
        </resources>
    </route>
</routes>

6. Magento webapi.xml und ACL richtig konfigurieren

Jede Route in webapi.xml ist über das resources-Element mit einer ACL-Ressource aus acl.xml verknüpft, und genau diese Verknüpfung entscheidet darüber, wer den Endpunkt überhaupt aufrufen darf. Drei Werte sind dabei zu unterscheiden: anonymous erlaubt den Zugriff ohne jede Authentifizierung, self erlaubt eingeloggten Kunden den Zugriff auf ihre eigenen Daten, und ein konkreter ACL-Pfad wie Magento_Sales::sales bindet den Zugriff an eine explizite Admin-Berechtigung. Der häufigste Konfigurationsfehler ist ein zu großzügig gewählter Wert, meist aus Bequemlichkeit während der Entwicklung, der nie wieder verschärft wird, bevor der Endpunkt produktiv geht.

Für Admin-nahe Endpunkte muss die ACL-Ressource in acl.xml als eigener, granularer Knoten unterhalb von Magento_Backend::admin deklariert werden, statt pauschal auf einen bereits existierenden, zu breiten Knoten zu verweisen. So lässt sich später im Backend gezielt steuern, welche Admin-Rollen Zugriff auf den jeweiligen Endpunkt erhalten. Nach jeder Änderung an ACL oder Webapi-Routen ist ein Test mit mindestens drei unterschiedlichen Rollen Pflicht: ein anonymer Aufrufer, ein regulärer Kunde und ein Admin mit eingeschränkter Rolle, um sicherzustellen, dass keine Rolle mehr Zugriff erhält, als beabsichtigt.


<!-- webapi.xml: bind the route to a dedicated, granular ACL resource -->
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route url="/V1/mironsoft/security/audit-log" method="GET">
        <service class="Mironsoft\Security\Api\AuditLogRepositoryInterface" method="getList"/>
        <resources>
            <!-- Never use Magento_Backend::all for a new endpoint -->
            <resource ref="Mironsoft_Security::audit_log_view"/>
        </resources>
    </route>
</routes>

<!-- acl.xml: declare a dedicated, narrow resource node -->
<acl xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
    <acls>
        <resource id="Magento_Backend::admin">
            <resource id="Mironsoft_Security::security" title="Security" sortOrder="10">
                <resource id="Mironsoft_Security::audit_log_view"
                          title="View Audit Log" sortOrder="10"/>
            </resource>
        </resource>
    </acls>
</acl>

7. Eingabevalidierung als zweite Verteidigungslinie

Selbst mit sauberer Authentifizierung, Autorisierung und Mass-Assignment-Schutz bleibt Eingabevalidierung notwendig, weil sie eine andere Angriffsklasse abdeckt: fachlich ungültige oder böswillig konstruierte Werte innerhalb erlaubter Felder. Ein E-Mail-Feld muss tatsächlich ein gültiges E-Mail-Format haben, ein Preisfeld darf nicht negativ sein, und ein Freitextfeld für Bestellnotizen darf keine ungewöhnliche Länge annehmen, die auf einen Denial-of-Service-Versuch über Speicherverbrauch hindeutet. Typisierte PHP-Parameter mit declare(strict_types=1) fangen grobe Typfehler bereits auf Sprachebene ab, ersetzen aber keine fachliche Validierung von Wertebereichen und Formaten.

Für SQL-nahe Operationen gilt zusätzlich: Magentos ResourceModel- und Collection-Klassen nutzen intern parametrisierte Statements über Zend/Laminas DB-Adapter, wodurch klassische SQL-Injection bei korrekter Nutzung strukturell ausgeschlossen ist. Sobald jedoch rohe SQL-Fragmente mit String-Konkatenation aus Benutzereingaben zusammengesetzt werden, etwa in einem individuellen Report-Endpunkt, entsteht dieselbe Schwachstelle wieder. Die verlässliche Regel lautet: niemals Benutzereingaben direkt in SQL-Strings einfügen, sondern ausschließlich über Bind-Parameter der Query Builder übergeben, unabhängig davon, wie vertrauenswürdig die Quelle erscheint.

8. Rate Limiting gegen Missbrauch und Brute Force

Ohne Ratenbegrenzung ist jeder Login-, Passwort-Reset- oder Suchendpunkt ein offenes Einfallstor für automatisierte Angriffe: Credential Stuffing probiert massenhaft gestohlene Zugangsdaten aus anderen Datenlecks durch, und ungebremste Requests gegen teure Endpunkte wie Preisberechnung oder Volltextsuche können ganze Systeme in die Knie zwingen. Magento bringt für anonyme Webapi-Zugriffe eine grundlegende Ratenbegrenzung mit, die aber für produktionskritische Endpunkte oft zu grob konfiguriert ist und um eine Reverse-Proxy- oder CDN-Ebene ergänzt werden sollte.

Eine belastbare Umsetzung unterscheidet zwischen lesenden und schreibenden Endpunkten, da Schreiboperationen typischerweise ein niedrigeres, striktes Limit vertragen als lesende Katalogabfragen. Bei Überschreitung antwortet die API mit 429 Too Many Requests und einem Retry-After-Header, damit sich Clients korrekt verhalten können, statt sofort erneut zu senden. Auf Infrastrukturebene lässt sich das effizient über Nginx limit_req-Zonen pro IP und Token umsetzen, bevor ein Request überhaupt den PHP-FPM-Prozess erreicht und damit Serverressourcen bindet.


# nginx.conf: rate limit REST API requests per client IP,
# stricter for write operations than for read-only endpoints
http {
    limit_req_zone $binary_remote_addr zone=api_read:10m rate=60r/m;
    limit_req_zone $binary_remote_addr zone=api_write:10m rate=10r/m;

    server {
        location ~ ^/rest/.*/V\d+/mironsoft/security/ {
            limit_req zone=api_write burst=5 nodelay;
            limit_req_status 429;
            add_header Retry-After 60 always;
            proxy_pass http://fastcgi_backend;
        }

        location ~ ^/rest/.*/V\d+/(products|categories) {
            limit_req zone=api_read burst=30 nodelay;
            limit_req_status 429;
            proxy_pass http://fastcgi_backend;
        }
    }
}

9. Monitoring und Logging für API-Sicherheitsvorfälle

Eine gut abgesicherte API ohne Monitoring bleibt ein Blindflug: Ohne strukturierte Logs lässt sich weder ein laufender Angriff erkennen noch nachträglich rekonstruieren, welche Daten ein kompromittiertes Token tatsächlich abgerufen hat. Jeder fehlgeschlagene Authentifizierungs- und Autorisierungsversuch sollte mit Zeitstempel, anfragender IP, betroffener Route und einer stabilen Korrelations-ID geloggt werden, ohne dabei sensible Nutzdaten wie Passwörter, volle Tokens oder Kreditkartendaten im Klartext zu speichern.

Strukturierte JSON-Logs lassen sich deutlich einfacher in ein SIEM oder ein zentrales Log-Aggregationssystem einspeisen als Freitext-Logzeilen, und ermöglichen automatisierte Alerts, etwa bei einer ungewöhnlichen Häufung von 401- oder 403-Antworten von derselben IP innerhalb kurzer Zeit. Ebenso wichtig ist eine klare Aufbewahrungsfrist für diese Logs, die einerseits forensische Analysen über mehrere Wochen ermöglicht, andererseits datenschutzrechtliche Vorgaben zur Speicherdauer personenbezogener Daten wie IP-Adressen einhält.

Die folgende Übersicht stellt unsichere und sichere Muster für die wichtigsten Bereiche direkt gegenüber.

Bereich Unsicheres Muster Sicheres Muster Warum
Mass Assignment setData() mit rohem Request-Body DTO mit expliziter Feld-Allow-List Verhindert Setzen interner Felder
Login-Fehler Unterschiedliche 401/404-Antworten Einheitliche 401-Antwort Verhindert User Enumeration
Autorisierung Nur Token-Gültigkeit geprüft Zusätzliche Ressourcenbesitz-Prüfung Verhindert IDOR/BOLA
Versionierung Alte Route läuft unbegrenzt weiter Sunset-Header und feste Deprecation-Frist Ermöglicht sicheren Endpunkt-Ausstieg
Rate Limiting Unbegrenzte Login-Versuche 429 mit Retry-After nach Schwellenwert Bremst Brute-Force und Credential Stuffing

Mironsoft

REST-API-Security, ACL-Konfiguration und Absicherung für Magento-Shops

Eure REST-Endpunkte professionell absichern?

Wir prüfen Authentifizierung, Autorisierung, Mass-Assignment-Schutz und Rate Limiting eurer Magento-APIs, identifizieren konkrete Schwachstellen und setzen gezielte Härtungsmaßnahmen um, von webapi.xml ACL bis zum Monitoring-Setup.

REST-API-Security-Audit

OWASP-API-Top-10-Analyse mit priorisierten Findings

ACL & webapi.xml Härtung

Granulare Ressourcen, sauberer Rollen-Zuschnitt

Monitoring-Setup

Strukturiertes Logging und Alerts bei Auffälligkeiten

10. Zusammenfassung

REST-API-Security für produktive Endpunkte ist kein einmaliges Härtungsprojekt, sondern eine Kombination wiederkehrender Prinzipien: Authentifizierung und Autorisierung müssen strikt getrennt und für jede Ressource einzeln geprüft werden, Mass Assignment wird durch explizite DTOs statt offener Hydration ausgeschlossen, und Statuscodes dürfen niemals mehr Information preisgeben als für den legitimen Anwendungsfall nötig. Eine durchdachte Versionierungsstrategie erlaubt es, unsichere Endpunkte kontrolliert abzukündigen, statt sie aus Kompatibilitätsgründen unbegrenzt weiterzubetreiben.

In Magento konzentriert sich ein großer Teil der praktischen Absicherung auf die korrekte Konfiguration von webapi.xml und acl.xml mit granularen, statt pauschalen Ressourcen, ergänzt um konsequente Eingabevalidierung, Rate Limiting auf Infrastrukturebene und strukturiertes Monitoring. Keine dieser Maßnahmen ist für sich genommen ausreichend, aber gemeinsam bilden sie mehrere unabhängige Verteidigungsebenen, die einen einzelnen Fehler nicht sofort zum vollständigen Sicherheitsvorfall werden lassen.

REST-API-Security für produktive Endpunkte - Das Wichtigste auf einen Blick

Authentifizierung & Autorisierung

Token-Gültigkeit prüfen reicht nicht, zusätzlich Ressourcenbesitz auf Objektebene verifizieren.

Mass Assignment verhindern

Explizite DTOs mit Allow-List statt setData() auf rohen Request-Daten.

Statuscodes & Versionierung

Generische Fehlermeldungen ohne Enumeration, Sunset-Header für Deprecation.

ACL, Rate Limiting & Monitoring

Granulare webapi.xml/acl.xml-Ressourcen, 429 mit Retry-After, strukturierte Logs.

11. FAQ: REST-API-Security für produktive Endpunkte

1Was ist der Unterschied zwischen Authentifizierung und Autorisierung bei REST-APIs?
Authentifizierung stellt fest, wer den Request stellt. Autorisierung prüft unabhängig davon, ob dieser Aufrufer die Aktion auf genau dieser Ressource ausführen darf. Ein gültiges Token allein reicht dafür nicht aus.
2Was ist Mass Assignment und wie schützt man sich dagegen?
Ungefilterte Übertragung des Request-Bodys auf ein Datenmodell, wodurch interne Felder manipulierbar werden. Schutz bieten explizite DTOs mit einer Allow-List statt generischer Hydration.
3Warum sollte ein falsches Passwort nicht mit 404 statt 401 beantwortet werden?
Unterschiedliche Statuscodes erlauben Enumeration gültiger Konten. Eine einheitliche 401-Antwort für falsches Passwort und unbekannte E-Mail-Adresse verhindert diesen Informationsabfluss.
4Wie funktioniert IDOR/BOLA und wie verhindere ich es in Magento?
Tritt auf, wenn nur die Token-Gültigkeit geprüft wird, nicht aber der Ressourcen-Eigentümer. Die Customer-ID aus dem Token muss explizit mit der Customer-ID des Datensatzes abgeglichen werden.
5Wie sollte eine Versionierungsstrategie für sichere Endpunkt-Deprecation aussehen?
Parallele V1/V2 Routen, Sunset-Header auf der alten Version, aktives Monitoring der Zugriffe und Deaktivierung erst nach klar kommunizierter Frist.
6Wie konfiguriere ich ACL-Ressourcen in webapi.xml korrekt?
Eigene, granulare ACL-Ressource pro Route statt pauschalem Verweis auf einen breiten Knoten. Test mit anonymem, Kunden- und eingeschränktem Admin-Zugriff nach jeder Änderung.
7Reicht Typvalidierung durch DTOs als Eingabevalidierung aus?
Nein, typisierte Parameter fangen nur grobe Typfehler ab. Wertebereiche, Formate und Längen müssen zusätzlich fachlich validiert werden.
8Wie implementiere ich Rate Limiting für Magento REST-Endpunkte?
Über Nginx limit_req-Zonen pro IP, strenger für Schreiboperationen als für lesende Endpunkte. Bei Überschreitung 429 mit Retry-After-Header.
9Welche Daten sollte ich beim API-Logging vermeiden?
Passwörter, vollständige Tokens und Kreditkartendaten niemals im Klartext loggen. Sinnvoll sind Zeitstempel, IP, Route und eine Korrelations-ID.
10Was ist der wichtigste erste Schritt, um eine bestehende REST-API abzusichern?
Systematisches Audit aller webapi.xml-Routen gegen die ACL-Ressourcen, gefolgt von der Prüfung auf Objektebenen-Autorisierung bei allen Endpunkten mit ID-Parametern.