Skip to main content

 

参考情報

 

OutSystems

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

Message
Ensure the expand inline argument is protected by using EncodeSql(), or VerifySqlLiteral() from the Sanitization extension, to avoid security flaws.
原因
この警告で言及されている引数にユーザーが入力した値があり、そこに悪意のあるコンテンツが含まれている可能性があります。
推奨事項

パラメータの内容に応じて、以下のいずれかの手順を実行します。

文字列リテラルのみ

文字列リテラルのみを含むパラメータの場合、クエリパラメータのExpand Inlineプロパティを無効化します。

例:

SELECT {entity}.[attribute]
FROM {entity}
WHERE {entity}.[attribute] LIKE @parameter;

parameterは、ユーザー定義のText型変数variableと同等です。

parameter = variable
文字列リテラルのみを含むSQL句

文字列リテラルのみを含むSQLを含むパラメータparameterの場合、信頼できない変数をEncodeSql()ビルトイン機能でラップして、特定の文字(一重引用符'など)をエスケープします。

例:

SELECT {entity}.[attribute]
FROM {entity}
@parameter;

parameterは、ユーザー定義のText型変数variableを含むSQL句として定義されています。

parameter  = "WHERE {entity}.[attribute] LIKE" + " ' " + EncodeSql(variable) + " ' "

EncodeSql()機能を必ず一重引用符でラップしてください。ラップしない場合、SQLインジェクションに対するクエリの脆弱性が残ってしまいます。
" ' " + EncodeSql(variable) + " ' "
非文字列リテラルを含むSQL句

非文字列リテラル(整数リテラル、リテラルのリストなど)を含むSQL句が含まれるパラメータの場合、有効なSQLリテラルのみを含めるために、信頼できない変数をVerifySqlLiteral()関数でラップして、Sanitization拡張機能にします。

例:

SELECT {entity}.[attribute]
FROM {entity}
@parameter;

parameterは、ユーザー定義のInteger型変数integer-variableを含むSQL句で定義されています。

parameter  = "WHERE {entity}.[integer-attribute] = VerifySqlLiteral(integer-variable)
  • Was this article helpful?