Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Formulare und CSRF-Schutz

Wie Formulare in Exponential funktionieren, für Entwickler, die Formular-Komponenten, Form Requests und CSRF-Middleware gewohnt sind - Templates, die das Formular schreiben, Modul-Aktionen, die es lesen, eZHTTPTool für…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/web-framework-developers/forms-and-csrf-protection.md

On this page

This page is a translation. Read the English original

Formulare und CSRF-Schutz

Diese Seite richtet sich an Entwickler, die Symfony-Formulartypen, Laravel Form Requests, Django-Formulare oder die Formular-Helfer von Rails gewohnt sind. Exponential hat keine Formular-Komponente, die ein Formularobjekt aufbaut, bindet und validiert. Ein Formular ist HTML in einem Template; die View liest die gesendeten Werte über die Hilfsmittel des Kernels und Modul-Aktionen; und die Erweiterung ezformtoken schützt POST-Requests vor Cross-Site Request Forgery, ohne dass Ihre Formulare dafür Code brauchen.

Inhalt

  1. Die Bestandteile eines Formulars
  2. CSRF-Schutz mit ezformtoken
  3. Eingaben lesen
  4. POST, Weiterleitung, GET
  5. Uploads
  6. Formulare für Besucher
  7. Im Vergleich mit anderen Frameworks

Die Bestandteile eines Formulars

BestandteilWo
Das HTML-FormularIhr Template, das an Ihre View sendet: <form method="post" action={'expdemo/edit/42'|ezurl}>
Schaltflächen als Aktionensingle_post_actions in module.php: array( 'StoreButton' => 'Store', 'CancelButton' => 'Cancel' )
Werte je Aktionpost_action_parameters: array( 'Store' => array( 'Title' => 'ItemTitle' ) )
Lesen$Module->isCurrentAction( 'Store' ), $Module->actionParameter( 'Title' ) oder eZHTTPTool
Validierung und FehlerIhr Code; Fehler werden an das Template zurückgegeben (Validierung)

Ein ausgearbeitetes Formular finden Sie in Aufgabe: ein kleines CRUD-Modul bauen.

CSRF-Schutz mit ezformtoken

ezformtoken registriert zwei Listener (Middleware):

  • response/output: fügt jedem Formular mit method="post" auf der Seite ein verstecktes Token-Feld hinzu, und zwar für einen angemeldeten Benutzer mit Session. Ihre Templates brauchen dafür nichts.
  • request/input: weist einen POST eines solchen Benutzers ohne das richtige Token zurück, das aus dem Formularfeld oder aus dem Header X-CSRF-Token gelesen wird. Die Antwort ist eine 403-Seite „Dieses Formular ist abgelaufen“ (oder ein JSON-Body bei XHR- und JSON-Requests) und eine Zeile in var/log/warning.log, niemals das Token selbst (Seite für abgelaufene Formulare).

Legen Sie pro Installation ein eigenes Geheimnis in settings/override/site.ini.append.php fest:

[HTMLForms]
Secret=<a long random value of your own>

JavaScript, das mit fetch() sendet, schickt das Token im Header X-CSRF-Token; lesen Sie es aus der Seite, statt die Prüfung abzuschalten (Formulare, CSRF-Schutz und HTTP-Eingaben).

Anonyme Besucher haben keine Session, an die ein Token gebunden werden könnte, daher prüft ezformtoken ihre POSTs nicht. Öffentliche Formulare werden mit anderen Mitteln geschützt: einem CAPTCHA aus der Erweiterung recaptcha oder hcaptcha und serverseitiger Validierung (Spamschutz für Formulare).

Eingaben lesen

$http = eZHTTPTool::instance();
if ( $http->hasPostVariable( 'Title' ) )
    $title = trim( (string)$http->postVariable( 'Title' ) );
$page = $http->hasGetVariable( 'page' ) ? max( 1, (int)$http->getVariable( 'page' ) ) : 1;

Lesen Sie $_POST oder $_GET nie direkt: Unter Velocity bereitet der Kernel sie für jeden Request auf.

POST, Weiterleitung, GET

if ( $Module->isCurrentAction( 'Store' ) && $errors === array() )
{
    $item->store();
    return $Module->redirectTo( '/expdemo/item/' . (int)$item->attribute( 'id' ) );
}

Weiterleitungsziele, die aus dem Request stammen, müssen auf der Site bleiben (Sichere Weiterleitungen).

Uploads

if ( eZHTTPFile::canFetch( 'File' ) )
{
    $file = eZHTTPFile::fetch( 'File' );
    // check $file->attribute( 'mime_type' ) and size against an allow list before storing
}

Für Dateien, die zu Inhalten gehören, legen Sie stattdessen ein Objekt der Klasse file oder image an; es kümmert sich um Speicherung, Clustering und die Bereinigung von SVG-Dateien (Inhalte im Code anlegen und aktualisieren).

Formulare für Besucher

Kontaktformulare, Umfragen und Feedback brauchen meist kein PHP: Eine Inhaltsklasse mit Attributen als Informationssammler sammelt die Antworten, und die Administrationsoberfläche listet sie auf (Formulare mit dem Informationssammler, Ein Kontaktformular bauen).

Im Vergleich mit anderen Frameworks

FrameworkKonzeptExponential
SymfonyFormulartypen, handleRequest(), CSRF-OptionTemplate plus Modul-Aktionen; ezformtoken
LaravelForm Requests, @csrfIhre Validierung in der View; Token wird für angemeldete Benutzer automatisch hinzugefügt
DjangoForm-Klassen, {% csrf_token %}dieselbe Aufteilung; Informationssammler für einfache öffentliche Formulare
Railsform_with, Strong ParametersAktionsparameter, die in module.php deklariert sind

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x