【こーどいんじぇくしょん】

コードインジェクション とは?

公開:
💡 入力データが、実行する命令に化ける

外部からの入力がプログラムのコードに紛れ込み、意図しない処理を実行させる問題です。入力をデータとして扱うはずが、実行する命令の一部として解釈されることで起きます。

📌 このページのポイント
入力を「命令」に混ぜない データとして扱う コードへ混ぜる 名前の入力 ひよこ 外部からの入力 細工された文字列 文字として表示 コードとして実行 こんにちは、ひよこ 意図しない処理 コードへ組み込む処理に問題がある場合 入力を受け取るだけで起きるわけではない
緑はデータとして扱う例、赤は入力が実行するコードを変えてしまう例です。
ひよこ ひよこ
コードインジェクションって、何をされるの?
ペンギン先生 ペンギン先生
外部から送られた入力がプログラムのコードに紛れ込み、意図しない処理を動かしてしまう問題だよ。入力を受け取ること自体ではなく、それを実行する命令の一部として解釈してしまうのが問題なんだ。
ひよこ ひよこ
データと命令って、どう違うの?
ペンギン先生 ペンギン先生
たとえば名前欄に入れた「ひよこ」は、表示したり保存したりするデータだよ。その入力を、プログラムとして実行する文字列へ直接つなぐ設計だと、細工された入力が命令の形を変える場合がある。名前欄があるだけで危険という意味ではないよ。
ひよこ ひよこ
ペンギン先生 ペンギン先生
入力と命令が混ざる点は似ているけれど、何が解釈するかを分けて考えよう。SQLインジェクションはデータベースへのSQL、OSコマンドインジェクションはOSへの命令が対象だよ。ここでは、Perlなどのプログラムのコードへ入力が紛れ込む問題を扱っているんだ。
ひよこ ひよこ
RCEとも書かれていたよ。同じ意味?
ペンギン先生 ペンギン先生
RCEは、離れた場所からコードを実行できることを指すよ。コードインジェクションは問題の仕組み、RCEは実行できる範囲や結果に注目した言葉なんだ。コードインジェクションがRCEにつながることはあるけれど、RCEには別の原因もあるよ。
ひよこ ひよこ
どうやって防ぐの?
ペンギン先生 ペンギン先生
開発では、入力からコードを作って実行する設計を避け、必要な処理を決めた関数やデータ用の処理へ渡すのが基本だよ。入力の種類や範囲の検証、実行権限の制限も組み合わせる。製品の利用者なら、公式の修正版や緩和策を確認して適用しよう。
もっと詳しく知りたい人へ

evalを使うと必ずコードインジェクションになる?

必ずではないよ。evalのような文字列をコードとして評価する機能に、外部から影響を受ける入力が渡ると危険につながる。評価する内容がどう作られるかが重要なんだ。不審な単語だけを取り除く方法に頼らず、そもそも入力をコードとして評価する必要があるかを見直そう。

Movable Typeのニュースでは何が起きたの?

2026年10月7日に公表されたJVNの情報では、コードインジェクションの問題とSQLインジェクションの問題が別々に示されているよ。細工されたリクエストによって任意のPerlコードやSQLコマンドが実行されるおそれがあるとされている。一般的な仕組みと、その製品で影響を受ける条件は区別して、提供元の案内を確認しよう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コードインジェクション」って出てきたら「入力データをコードに紛れ込ませ、意図しない処理を動かすこと」と思えばだいたいOK!
📖 おまけ:英語の意味
「Code Injection」 = コードの注入
💬 Injectionは「注入」という意味。外部からの入力を通じて、実行されるコードへ意図しない処理を紛れ込ませることを表しているよ。

参考資料

← 用語集にもどる