edit

CORS

Cross Origin Resource Sharing

  • Ziel: Cross-Site-Requests erlauben, um z.B. per AJAX von einem anderen Server Daten zu laden
  • Alternative mit <script src=".." />, ist aber gefährlich, weil es in der gleichen Security Domain wie unsere App ausgeführt wird!

Warning

Kein Schutz gegen XSS!

  • Der Browser schickt mit dem AJAX-Request einen Origin: mySite header mit der Origin der Seite
  • Der Server (API) kann entscheiden, ob die Origin erlaubt ist
  • Der Server der API, auf die zugegriffen werden möchte, setzt den Header Access-Control-Allow-Origin: mySite bei der Antwort

Pre-flight request

- Problem: Bei der Antwort des Server weiss der Client noch nicht, ob er Cross-Domain damit kommunizieren kann - Der Client schickt vor dem ersten eigentlichen Request einen OPTIONS-Request an den Server - Der Server antwortet mit den verfügbaren HTTP-Methoden und dem Access-Control-Allow-Origin-Header - Nun weiss der Browser, ob er mit dem Server kommunizieren kann - Nicht alle CORS-Requests brauchen einen Pre-flight-Request, es ist standardisiert welche (z.B. Multipart form und alle Methoden ausser GET, POST und HEAD) - Wird vom Browser automatisch gemacht

Angriffsvektor

  • Wenn der Angreifer den Browser kontrolliert, kann er den origin-Header manipulieren. Der Server könnte das aber irgendwann merken
  • Im grossen Stil ist der Angriff nicht wirkungsvoll