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. Dazu können einzelne Aktionen vor CSRF-Attacken geschützt werden, indem csrfToken="1"
für die jeweilige Aktion in der Module.xml ergänzt wird. 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, 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
Einfache Links, z.B. zu IndexUser können deshalb nicht per CSRF-Token abgesichert werden. Es sei denn, man verlinkt immer über ein ButtonControl in einem FormControl, zum Beispiel.
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>
Add Comment