In einer Notizen-Anwendung speichert Alice den „Entwurf für das Quartalsbudget“ als Notiz Nr. 1. Bob meldet sich bei seinem eigenen Konto an, sendet eine GET /notes/1-Anfrage und erhält Alices Notiz, da der Server zwar prüft, ob Bob angemeldet ist, aber nicht kontrolliert, ob Bob auch der Eigentümer der Notiz Nr. 1 ist. Bob benötigte dafür weder Alices Passwort noch spezielle Zugriffsrechte – lediglich einen vorhersehbaren Bezeichner. Sollte die API Alices Inhalte zurückgeben, wenn Bob die Notiz Nr. 1 anfordert? Das folgende kleine lokale Beispiel veranschaulicht die unsichere Anfrage und Antwort:
Dieser Code gibt Alices JSON-Datensatz zurück, obwohl Bob als der handelnde Benutzer identifiziert wird. Der feststellbare Fehler ist eine fehlerhafte Zugriffskontrolle (Broken Access Control), bei der der Server einer authentifizierten Person gestattet, eine Aktion auszuführen, die über ihre Berechtigungen hinausgeht. Die unmittelbare Abhilfemaßnahme ist eine serverseitige Überprüfung der Eigentumsrechte vor dem Lesen der Notiz; als Erkennungssignal dient ein Protokolleintrag, der Bob, die Notiz-ID 1 und die Entscheidung zur Zugriffsverweigerung festhält. Wir werden diese Notizen-Anwendung schrittweise korrigieren, sodass jede Sicherheitsregel mit einer Anfrage, einem Codeabschnitt und einer Methode zur Überprüfung der Fehlerbehebung verknüpft bleibt.
Die fehlende Überprüfung der Eigentumsrechte ist deshalb von Bedeutung, weil sich der Browser außerhalb der Vertrauensgrenze des API-Servers befindet. Eine Vertrauensgrenze (Trust Boundary) ist der Punkt, an dem die Anwendung Daten oder Anweisungen empfängt, die von einer anderen Partei beeinflusst werden können; daher muss der Server diese validieren und seine eigenen Regeln anwenden. Bobs Cookie und die angeforderte Notiz-ID gelangen von einem nicht vertrauenswürdigen Client zum Server; die API sendet die Datenbankabfrage erst ab, nachdem die Autorisierungsentscheidung getroffen wurde.
Dieselbe Anwendung verfügt über mehr als einen Einstiegspunkt. Ein nicht authentifizierter Internetnutzer kann Anmeldedaten übermitteln oder eine Notiz erstellen. Ein Benutzer mit eingeschränkten Rechten, wie etwa Bob, kann nach der Anmeldung Notiz-IDs und Notiztexte eingeben. Eine kompromittierte Abhängigkeit kann während des Build-Prozesses eingeschleust werden, wenn die Paket-Registry Code bereitstellt, den der Server später ausführt. Zu den schützenswerten Werten gehören aktive Sitzungen, Alices Notizen, Server-Geheimnisse sowie Protokolle, die Aufschluss über die erfolgten Anfragen geben. Das Diagramm verfolgt jede Eingabe bis zu der Komponente, die entscheiden muss, ob sie dieser vertraut: