言語インジェクション設定: SQL インジェクション
このダイアログは、 言語インジェクションページで
をクリックしてコンテキストメニューから SQL インジェクション を選択するか、エントリを選択して
をクリックすると開きます。
項目 | 説明 |
|---|
命名 | 注入の名前。 |
言語 | インジェクションされる言語。 ID :挿入する言語の ID または名前を選択してください。 接頭辞: 対応する文字列値の前に追加する文字のシーケンスを指定します。 接尾辞: 対応する文字列値の後に追加する文字のシーケンスを指定します。
接頭辞と接尾辞はオプションです。 |
配置パターン | このフィールドに、GoLand がリテラルをインジェクションとして認識するコンテキストを定義するルールを入力します。 SQL 要素パターン: SQL 要素パターンを使用して、言語インジェクションが適用される SQL 要素を識別します。 パターンを組み合わせることで、SQL ダイアレクト、関数名、引数の位置、関数引数の数によって一致を制限できます。 基本パターン:
sqlElement().forDialects(<DIALECT>).functionArgument(<INDEX>, <FUNCTION-PATTERN>)
sqlElement() は SQL 要素のパターンを開始します。 forDialects(<DIALECT>) は一致を指定された SQL ダイアレクトに制限します。 functionArgument(<INDEX>, <FUNCTION-PATTERN>) は、指定されたゼロベースのインデックスにある関数引数として使用される要素に、一致をさらに制限します。 関数呼び出しは <FUNCTION-PATTERN> と一致する必要があります。
<FUNCTION-PATTERN>:
sqlFunctionCall().name(<NAME>).params(<PARAMS-PATTERN>)
sqlFunctionCall() は関数呼び出しのパターンを開始します。 name(<NAME>) は一致を指定された名前の関数に制限します。 params(<PARAMS-PATTERN>) は関数の引数に追加条件を適用します。
<PARAMS-PATTERN>:
sqlExpressions().count(<MIN>, <MAX>)
sqlExpressions() は SQL 式のリストのパターンを開始します。 count(<MIN>, <MAX>) は、 <MIN> 個から <MAX> 個までの式を含むリストに一致を制限します。
組み合わせ例: [Oracleを使用します。] REGEXP_LIKE 内の RegExp 組み込みルール名: Oracle RegExp。
sqlElement()
.forDialects("Oracle")
.functionArgument(
1,
sqlFunctionCall()
.name("regexp_like")
.params(sqlExpressions().count(2, 3))
)
このパターンは、Oracleを使用します。 ダイアレクト内の SQL 要素が、インデックス 1 にある regexp_like 関数呼び出しの引数であり、その関数呼び出しに二つまたは三つの引数がある場合に一致します。 REGEXP_LIKE の二番目の引数は正規表現パターンであるため、GoLand は一致する文字列リテラル '^[a-z]+$' を RegExp フラグメントとして扱います:
SELECT 'Match'
FROM dual
WHERE REGEXP_LIKE('hello', '^[a-z]+$');
![[Oracle] REGEXP_LIKE 内の RegExp」},{ [Oracle] REGEXP_LIKE 内の RegExp」},{](https://resources.jetbrains.com/help/img/idea/2026.3/db_sql_injection_example_oracle_regexp.png) その他の例: [Oracleを使用します。] XMLQUERY 内の XPath 組み込みルール名: Oracle XPath。
sqlElement().forDialects("Oracle").functionArgument(0, sqlFunctionCall().name("xmlquery","xmlexists"))
このパターンは、インデックス 0 にある Oracleを使用します。 XMLQUERY および XMLEXISTS 関数呼び出しの引数に一致します。 GoLand は一致する文字列リテラル '/catalog/book' を XPath フラグメントとして扱います:
SELECT XMLQUERY(
'/catalog/book'
PASSING XMLTYPE('<catalog><book>SQL</book></catalog>')
RETURNING CONTENT
)
FROM dual;
![[Oracle] XMLQUERY 内の XPath [Oracle] XMLQUERY 内の XPath](https://resources.jetbrains.com/help/img/idea/2026.3/db_sql_injection_example_oracle_xpath.png) [Microsoft SQL サーバー] OPENJSON 内の JSON 組み込みルール名: SQL Server JSON。
sqlElement().forDialects("TSQL").functionArgument(0,sqlFunctionCall().name("openjson").params(sqlExpressions().count(1, 2)))
このパターンは、インデックス 0 にある、一つまたは二つの引数を持つ T-SQL OPENJSON 呼び出しの引数に一致します。 GoLand は一致する文字列リテラル '{"name":"Alice","age":30}' を JSON フラグメントとして扱います:
SELECT *
FROM OPENJSON('{"name":"Alice","age":30}');
![[Microsoft SQL サーバー] OPENJSON 内の JSON [Microsoft SQL サーバー] OPENJSON 内の JSON](https://resources.jetbrains.com/help/img/idea/2026.3/db_sql_injection_example_ms_sql_server_json.png)
複数パターン 1つのインジェクションルールに対して複数の場所パターンを定義できます。 どれかのパターンに一致するとインジェクションが有効になります(OR ロジックで結合されています)。 各パターンを別々の行に追加してください。 |
拡張 | この領域では、必要に応じて追加設定を指定することで、インジェクションルールが適用されるコンテキストを絞り込み、インジェクションプロセスをよりきめ細かく制御できるようになります。 値パターン 言語をインジェクションするコンテキストを決定する正規表現を入力します。 パターンの最初のキャプチャーグループを挿入対象として使用することで、特定のパターンに一致する値、パターンに一致する複数の部分にのみ言語を挿入するように手順を構成できます。 単一ファイル - このオプションがオフの場合、値のパターンに一致するフラグメントは、たとえばフラグメントエディターの観点から、別々の「ファイル」として別々に扱われます。 このオプションがオンの場合、対応するフラグメントはすべてマージされて単一のユニット、つまり「ファイル」になります。 値のパターンを考える xxx (.+) yyy (.+) zzz
そしてフラグメント xxx select * yyy from family zzz,
このオプションがオフの場合、 select * と from family は 2 つの独立したフラグメント(または「ファイル」)として扱われます。 このオプションがオンの場合、 select * from family は単一のユニットまたは「ファイル」として扱われます。
|
2026 年 11 月 6 日