PhpStorm 2026.3 Help

言語インジェクション設定: SQL インジェクション

このダイアログは、 言語インジェクションページで 追加ボタン をクリックしてコンテキストメニューから SQL インジェクション を選択するか、エントリを選択して the Edit button をクリックすると開きます。

PhpStorm には、生産性と使いやすさを保証する定義済みのインジェクション設定が含まれています。 新しい設定を作成するのではなく、これらの設定を利用することをお勧めします。

項目

説明

Name

注入の名前。

言語

インジェクションされる言語。

  • ID このリストから、注入する言語の ID または名前を選択します。

  • 接頭辞: 対応する文字列値の前に追加する文字のシーケンスを指定します。

  • 接尾辞: 対応する文字列値の後に追加する文字のシーケンスを指定します。

接頭辞と接尾辞はオプションです。

配置パターン

このフィールドに、IntelliJ IDEA がリテラルをインジェクションとして認識するコンテキストを定義する規則を入力します。

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 要素が、二つまたは三つの引数を持つ regexp_like 関数呼び出しのインデックス 1 にある引数である場合に一致します。

REGEXP_LIKE の二番目の引数は正規表現パターンであるため、IntelliJ IDEA は一致する文字列リテラル '^[a-z]+$' を RegExp フラグメントとして扱います:

SELECT 'Match' FROM dual WHERE REGEXP_LIKE('hello', '^[a-z]+$');
[Oracle] REGEXP_LIKE 内の RegExp

その他の例:

  • [Oracle] XMLQUERY 内の XPath

    組み込みルール名: Oracle XPath。

    sqlElement().forDialects("Oracle").functionArgument(0, sqlFunctionCall().name("xmlquery","xmlexists"))

    このパターンは、インデックス 0 にある、Oracle XMLQUERY および XMLEXISTS 関数呼び出しの引数と一致します。

    IntelliJ IDEA は一致する文字列リテラル '/catalog/book' を XPath フラグメントとして扱います:

    SELECT XMLQUERY( '/catalog/book' PASSING XMLTYPE('<catalog><book>SQL</book></catalog>') RETURNING CONTENT ) FROM dual;
    [Oracle] XMLQUERY 内の XPath
  • [Microsoft SQL Server] OPENJSON 内の JSON

    組み込みルール名: SQL Server JSON。

    sqlElement().forDialects("TSQL").functionArgument(0,sqlFunctionCall().name("openjson").params(sqlExpressions().count(1, 2)))

    このパターンは、一つまたは二つの引数を持つ T-SQL OPENJSON 呼び出しのインデックス 0 にある引数と一致します。

    IntelliJ IDEA は一致する文字列リテラル '{"name":"Alice","age":30}' を JSON フラグメントとして扱います:

    SELECT * FROM OPENJSON('{"name":"Alice","age":30}');
    [Microsoft SQL サーバー] OPENJSON 内の JSON

複数のパターン

1 つのインジェクションルールに対して、複数のプレースパターンを定義できます。 いずれかのパターンが一致すると(OR 論理で結合されます)、インジェクションが実行されます。 各パターンは別々の行に追加してください。

高度

この領域では、必要に応じて追加設定を指定することで、インジェクションルールが適用されるコンテキストを絞り込み、インジェクションプロセスをよりきめ細かく制御できるようになります。

  • 値パターン は、言語を挿入するコンテキストを決定する正規表現です。 パターンの最初のキャプチャーグループを挿入対象として使用することで、特定のパターンに一致する値、パターンに一致する複数の部分にのみ言語を挿入するように手順を設定できます。

  • 単一ファイル - このオプションがオフの場合、値のパターンに一致するフラグメントは、たとえばフラグメントエディターの観点から、別々の「ファイル」として別々に扱われます。

    このオプションがオンの場合、対応するフラグメントはすべてマージされて単一のユニット、つまり「ファイル」になります。

    値のパターンを考える

    xxx (.+) yyy (.+) zzz

    そしてフラグメント

    xxx select * yyy from family zzz,

    このオプションがオフの場合、 select * と from family は 2 つの独立したフラグメント(または「ファイル」)として扱われます。 このオプションがオンの場合、 select * from family は単一のユニットまたは「ファイル」として扱われます。

2026 年 11 月 9 日