CSRF-Tokens

Eine Einführung in CSRF-Tokens: https://portswigger.net/web-security/csrf/tokens. Ähnlich wie in dem Artikel beschrieben, bietet Nostromo seit nostromo/framework 6.5.113 ebenfalls Schutz vor CSRF-Attacken. Alle POST Aufrufe müssen ein CSRF-Token enthalten. Außerdem kann mit csrfToken="1" in der jeweiligen Aktion in der Module.xml eine Prüfung auf ein CSRF-Token erzwungen werden Beispiel:

<action name="updateTag" menu="0" security="1" csrfToken="1"> <description>Tag speichern</description> <next type="view">indexTag</next> </action>

Das gleiche kann natürlich auch über die Nostromo-Oberfläche erreicht werden.

Einschränkungen

Aktionen, die csrfToken="1" nicht haben und per GET aufgerufen werden, sind nicht gegen CSRF-Attacken geschützt. Diese sollten also keine (sensiblen) Daten ändern! Wie oben im Artikel beschrieben, sollten CSRF-Tokens nicht per GET übertragen werden. Deshalb werden diese in Nostromo nur über POST übertragen. Aktuell werden sie unterstützt von:

  • FormControl

  • SubmitDataControl

  • Delete-Button im GridControl

Deshalb muss für jede Aktion einzeln überprüft werden, ob CSRF-Tokens für diese aktiviert werden können.

Die CsrfToken-Klasse

Folgende Funktionen der CsrfToken-Klasse sind vermutlich von Interesse:

  • $aktuellesToken = (string) CsrfToken::getInstance();

  • CsrfToken::getInstance()->renew();

  • CsrfToken::check($aktion, $request);

Letztere Funktion überprüft, ob für die Aktion CSRF-Tokens aktiviert sind, und wenn ja, ob das richtige CSRF-Token im Request hinterlegt ist.

Ablaufzeit des CSRF-Tokens

Standardmäßig läuft das CSRF-Token nach 6 Stunden ab, wenn es nicht verlängert wird. Verlängert wird das Token automatisch, wenn es innerhalb der 6 Stunden benutzt wird, z.B. von einer Aktion. Die Ablaufzeit kann eingestellt werden in der Configuration.xml wie folgt:

<security> <csrfTokenRenewTime>6</csrfTokenRenewTime> </security>

 

Related pages