式
ブラウザーまたはサーバーで、JavaScript を使ってフィールドの値を計算する
フォーム作成者向け: ブラウザーで計算したり、サーバーで取得したりした値を JavaScript でフィールドに動的に入れる方法を説明します。
フォームフィールドの expression 属性を使うと、JavaScript の式で動的なフォームを作成できます。
はじめに
expression 属性は、複数のフィールドの種類で使用できます。
enumフィールド: ドロップダウンの選択肢を動的に設定するexpressionフィールド: あらゆる形式のデータを取得または生成するhtmlフィールド: HTML コンテンツを作成するyamlフィールドとlistフィールド: データを入れる
JavaScript の式は、フィールドのプロパティ runLocal の設定に応じて、 サーバー側 (既定) または クライアント側 で評価されます。 html フィールドと、フィールドの種類 local、 local_out、 credential は、 runLocal の設定にかかわらず、 常にブラウザーで式を実行します。
- サーバー側 (
runLocal: false、既定): API、ファイル、データベースからデータを取得する定義済みの関数です。 - クライアント側 (
runLocal: true): ブラウザーのサンドボックス内の完全な JavaScript エンジンを使って、計算、変換、操作を行うコードです。
セキュリティ上の懸念
式は JavaScript の eval 関数で評価されるため、コードインジェクションが懸念されます。
- サーバー側の式 は、まずサニタイザーを通ります。すべての呼び出しは
fn.またはfnc.の関数である必要があり、複数行、;、テンプレートリテラル、process.env、evalから抜け出す手段 (import、require、constructorなど) は拒否されます。 - クライアント側の式 はブラウザーのサンドボックスで評価されるため、安全とみなせます。
サニタイザーの厳しさは EXPRESSION_SANITIZER で決まります。
| 値 | サーバー側の式 |
|---|---|
strict (既定) | fn. と fnc. の呼び出しと、 fn.fnTime().format('YYYY') のようなその結果に対するメソッド |
paranoid | fn. と fnc. の直接の呼び出しだけ。結果に対するメソッドは不可 |
off | サーバー側の式はすべて拒否されます。 runLocal の式だけが動作します |
legacy | 6.2.1 のルール。認証済みのユーザーなら誰でもサーバー上でコードを実行できます。アップグレード時専用で、実際の環境変数でのみ設定できます (設定ページからは不可) |
空の値や不明な値は strict とみなされます。変更は再起動なしで、次の式から適用されます。
このセクションの内容
各トピックはそれぞれのページで説明しています。