injection.原因SQL要素で定義したSQLクエリを実行するとき、OutSystemsはデフォルトで準備されている文を使用します。これらの準備されている文には、SQL文を実行する前に値を定義するSQLパラメータやプレースホルダが含まれています。これらのパラメータには、任意のSQLフラグメントではなく、特定の型の値のみを格納することができます。Inlineプロパティを有効にすると、パラメータの値がSQLパラメータ値として処理されなくなります。クエリパラメータが、最初の評価とSQLエンジンによるリテラル変換が行われないまま、SQLパラメータに含められます。このため、クエリパラメータを使用してSQLフラグメントを完全なSQL文に動的に挿入することが可能になる一方、必要な対策を怠ると、エンドユーザーがこれを悪用できることにもなります。Sheet」をご覧ください。警告を非表示にしても安全な場合エンドユーザーによって入力された値がSQL文に追加されないようになっている場合にのみ、警告を非表示にします。Inlineプロパティが無効になっているすべてのクエリパラメータのSQLパラメータを使用します。このプロパティはデフォルトでは無効になっており、これによってSQLインジェクション攻撃に対するデフォルトの保護が提供されます。パラメータをインラインに展開して適切に使用することは困難です。すべてのユーザー入力を適切にエスケープ処理してからSQL文で使用する必要があるからです。できる限り、このプロパティを完全に有効化することは避けてください。OutSystemsでは、このプロパティを有効化せずに一般的なユースケースを実装する方法があります。「動的SQL文の適切な作成」をご覧ください。Inlineを使用する必要がある場合は、以下の推奨事項も考慮してください。Inlineプロパティが有効になっている場合に、SQL文で使用される文字列リテラルをエンコードします。EncodeSqlを使用する場合は以下の不適切なプラクティスを避けてください。EncodeSqlを使用して、SQLパラメータのコンテンツ全体をエンコードしないでください。@myVariable2)このパターンはほとんどの場合不適切であり、これを行うと警告が表示されます。EncodeSqlでSQL文のフラグメント全体をエンコードするのではなく、文字列リテラルのみをエンコードしてください。(@values)」句を作成しないでください。name)このアプローチではSQLインジェクションから保護されません。(@values)」句の作成には、BuildSafe_InClauseIntegerList関数とBuildSafe_InClauseTextList関数を使用してください。Replaceによる手動での文字列エンコードを実行しない文字列リテラルのエンコードはEncodeSql関数でのみ行ってください。Replace関数を使用して手動で行うとエラーが発生しやすく、アプリケーションにバグができ、後でアプリケーションのエンドユーザーによって悪用される可能性があります。