Ectoはプリペアドステートメントのみを使用します。 ectoクエリ構文を使用する場合、SQLインジェクションを導入することはできません。クエリ構文は、コンパイル時にSQLインジェクションが不可能であることを確認します。
実行されたクエリを正確に表示することは、いくつかの理由で難しい場合があります。
- Postgrex(したがってEcto)は(最も一般的ですが効率の低いテキストプロトコルの代わりに)postgresqlバイナリプロトコルを使用するため、
PREPARE
クエリが実際に文字列として存在することはありません。 - ほとんどの場合、最初に表示されるのは1つの
PREPARE 64237612638712636123(...) AS ...
だけです。 その後、多くのEXECUTE 64237612638712636123(...)
これはあまり役に立ちません。相互に関連付けようとするのは恐ろしいことです。
私の経験から、この種のほとんどのソフトウェアは、システムの動作を理解するのにはるかに役立つため、生のクエリの代わりにプリペアドステートメントを使用してログに記録します。