Ausdrücke
Feldwerte mit JavaScript berechnen, im Browser oder auf dem Server
Für Formularautoren: Felder dynamisch mit JavaScript füllen, im Browser berechnet oder auf dem Server abgerufen.
Mit dem Attribut expression eines Formularfelds erstellen Sie dynamische Formulare mit JavaScript-Ausdrücken.
Einführung
Das Attribut expression gibt es bei mehreren Feldtypen:
- Feld
enum: um die Optionen der Dropdown-Liste dynamisch zu füllen - Feld
expression: um beliebige Daten abzurufen oder zu erzeugen - Feld
html: um seinen HTML-Inhalt aufzubauen - Felder
yamlundlist: um ihre Daten zu füllen
JavaScript-Ausdrücke werden entweder auf der Serverseite (Standard) oder auf der Clientseite ausgewertet, je nach der Feldeigenschaft runLocal. Ein html-Feld sowie die Feldtypen local, local_out und credential führen ihren Ausdruck immer im Browser aus, egal was runLocal sagt.
- Auf der Serverseite (
runLocal: false, der Standard): vordefinierte Funktionen, die Daten aus APIs, Dateien und Datenbanken abrufen. - Auf der Clientseite (
runLocal: true): Der Code nutzt die volle JavaScript-Engine in der Sandbox des Browsers für Berechnungen, Umformungen und Bearbeitungen.
Sicherheitsaspekte
Da Ausdrücke mit der JavaScript-Funktion eval ausgewertet werden, ist Code-Injection ein mögliches Risiko:
- Serverseitige Ausdrücke durchlaufen zuerst einen Sanitizer: Jeder Aufruf muss eine
fn.- oderfnc.-Funktion sein, und mehrere Zeilen,;, Template-Literale,process.envund die Wege ausevalheraus (import,require,constructor, …) werden abgelehnt. - Clientseitige Ausdrücke werden in der Sandbox des Browsers ausgewertet und können als sicher gelten.
Wie streng der Sanitizer ist, hängt von EXPRESSION_SANITIZER ab:
| Wert | Serverseitige Ausdrücke |
|---|---|
strict (Standard) | fn.- und fnc.-Aufrufe sowie Methoden auf ihrem Ergebnis, etwa fn.fnTime().format('YYYY') |
paranoid | nur direkte fn.- und fnc.-Aufrufe, keine Methoden auf ihrem Ergebnis |
off | jeder serverseitige Ausdruck wird abgelehnt; nur runLocal-Ausdrücke funktionieren |
legacy | die Regeln von 6.2.1, die jeden angemeldeten Benutzer Code auf dem Server ausführen lassen; nur für ein Upgrade, und nur in der echten Umgebung (nicht über die Einstellungsseite) |
Ein leerer oder unbekannter Wert bedeutet strict. Eine Änderung gilt ab dem nächsten Ausdruck, ohne Neustart.
In diesem Abschnitt
Jedes Thema hat eine eigene Seite:
| Seite | Inhalt |
|---|---|
| Platzhalter | Mit $(...) auf ein anderes Feld, eine Konstante oder den Benutzer verweisen |
| Lokale Ausdrücke | JavaScript, das in der Sandbox des Browsers läuft |
| Remote-Ausdrücke | Serverseitige Funktionen für Datumswerte, Netzwerke, Dateien, SSH und nummerierte Namen |
| REST-APIs | REST-APIs mit Basic-, Token- oder eigener Authentifizierung aufrufen |
| Anmeldedaten | Gespeicherte Anmeldedaten lesen |
| Sortierung | Arrays mit einem Sortierobjekt sortieren |
| jq-Abfragen | Daten mit jq umformen |