Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

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>

  • No labels