【こーどいんじぇくしょん】
コードインジェクション とは?
公開:
💡 入力データが、実行する命令に化ける
外部からの入力がプログラムのコードに紛れ込み、意図しない処理を実行させる問題です。入力をデータとして扱うはずが、実行する命令の一部として解釈されることで起きます。
📌 このページのポイント
- 外部入力がコードの構文や動作を変えてしまう問題
- 入力を受け取っただけでなく、コードとして解釈する処理が問題になる
- SQLへの注入やOSコマンドへの注入とは、対象を分けて考える
- 入力からコードを組み立てて実行する設計を避けるのが基本
コードインジェクションって、何をされるの?
外部から送られた入力がプログラムのコードに紛れ込み、意図しない処理を動かしてしまう問題だよ。入力を受け取ること自体ではなく、それを実行する命令の一部として解釈してしまうのが問題なんだ。
データと命令って、どう違うの?
SQLインジェクションと同じ?
入力と命令が混ざる点は似ているけれど、何が解釈するかを分けて考えよう。SQLインジェクションはデータベースへのSQL、OSコマンドインジェクションはOSへの命令が対象だよ。ここでは、Perlなどのプログラムのコードへ入力が紛れ込む問題を扱っているんだ。
RCEとも書かれていたよ。同じ意味?
どうやって防ぐの?
開発では、入力からコードを作って実行する設計を避け、必要な処理を決めた関数やデータ用の処理へ渡すのが基本だよ。入力の種類や範囲の検証、実行権限の制限も組み合わせる。製品の利用者なら、公式の修正版や緩和策を確認して適用しよう。
もっと詳しく知りたい人へ
evalを使うと必ずコードインジェクションになる?
必ずではないよ。evalのような文字列をコードとして評価する機能に、外部から影響を受ける入力が渡ると危険につながる。評価する内容がどう作られるかが重要なんだ。不審な単語だけを取り除く方法に頼らず、そもそも入力をコードとして評価する必要があるかを見直そう。
Movable Typeのニュースでは何が起きたの?
2026年10月7日に公表されたJVNの情報では、コードインジェクションの問題とSQLインジェクションの問題が別々に示されているよ。細工されたリクエストによって任意のPerlコードやSQLコマンドが実行されるおそれがあるとされている。一般的な仕組みと、その製品で影響を受ける条件は区別して、提供元の案内を確認しよう。
まとめ:ざっくりこれだけ覚えればOK!
「コードインジェクション」って出てきたら「入力データをコードに紛れ込ませ、意図しない処理を動かすこと」と思えばだいたいOK!
📖 おまけ:英語の意味
「Code Injection」 = コードの注入
💬 Injectionは「注入」という意味。外部からの入力を通じて、実行されるコードへ意図しない処理を紛れ込ませることを表しているよ。