Skip to main content

 

 

 

 

Template:OutSystems/Documentation_KB/Breadcrumb_New_Layout

 

 

Template:OutSystems/OSLanguageSwitcher

 

 

 

OutSystems

SQLインジェクションに関する警告

メッセージ
Avoid enabling the Expand Inline property of a SQL Query Parameter since it could make your application vulnerable to SQL injection.
原因

SQL要素で定義したSQLクエリを実行するとき、OutSystemsはデフォルトで準備されている文を使用します。これらの準備されている文には、SQL文を実行する前に値を定義するSQLパラメータやプレースホルダが含まれています。これらのパラメータには、任意のSQLフラグメントではなく、特定の型の値のみを格納することができます。

クエリパラメータのExpand Inlineプロパティを有効にすると、パラメータの値がSQLパラメータ値として処理されなくなります。クエリパラメータが、最初の評価とSQLエンジンによるリテラル変換が行われないまま、SQLパラメータに含められます。このため、クエリパラメータを使用してSQLフラグメントを完全なSQL文に動的に挿入することが可能になる一方、必要な対策を怠ると、エンドユーザーがこれを悪用できることにもなります。

準備されている文によるSQLインジェクション攻撃回避の仕組みの詳細については、OWASPの「SQL Injection Prevention Cheat Sheet」をご覧ください。

警告を非表示にしても安全な場合
エンドユーザーによって入力された値がSQL文に追加されないようになっている場合にのみ、警告を非表示にします。

推奨事項: Expand Inlineの使用を避ける

OutSystemsでは、Expand Inlineプロパティが無効になっているすべてのクエリパラメータのSQLパラメータを使用します。このプロパティはデフォルトでは無効になっており、これによってSQLインジェクション攻撃に対するデフォルトの保護が提供されます。

パラメータをインラインに展開して適切に使用することは簡単にはできません。これは、すべてのユーザー入力を適切にエスケープ処理してからSQL文で使用する必要があるためです。できる限り、このプロパティを完全に有効にしないでください。

OutSystemsには、このプロパティを有効にせずに一般的なユースケースを実装する方法があります。「動的SQL文の適切な作成」をご覧ください。

Expand Inlineを使用する必要がある場合は、以下の推奨事項も考慮してください。

EncodeSqlを使用して文字列リテラルをエンコードする

EncodeSql関数は、Expand Inlineプロパティが有効になっている場合に、SQL文で使用される文字列リテラルをエンコードします。

EncodeSqlを使用する場合は以下の不適切なプラクティスを避けてください。

— EncodeSqlを使用して、SQLパラメータのコンテンツ全体をエンコードしないでください。例:
myparameter = EncodeSql("WHERE surname = " + @myVariable1 + " OR name = " + @myVariable2)
このパターンはほとんどの場合不適切であり、これを行うと警告が表示されます。
EncodeSqlでSQL文のフラグメント全体をエンコードするのではなく、文字列リテラルのみをエンコードしてください。

— EncodeSqlの呼び出しですべての値をラップする方法で「WHERE column IN (@values)」句を作成しないでください
values = EncodeSql(name1 + "," + name2 + "," + name)
このアプローチではSQLインジェクションから保護されません
「WHERE column IN (@values)」句の作成には、BuildSafe_InClauseIntegerList関数とBuildSafe_InClauseTextList関数を使用してください。

Replaceによる手動での文字列エンコードを実行しない
文字列リテラルのエンコードはEncodeSql関数でのみ行ってください。Replace関数を使用して手動で行うとエラーが発生しやすく、アプリケーションにバグができ、後でアプリケーションのエンドユーザーによって悪用される可能性があります。
  • Was this article helpful?