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>
Â