ひとことで言うと
プロンプトインジェクションは、AIが読み込んだ文章の中に「悪意ある指示」が仕込まれていて、それをAIが命令だと勘違いしてしまう攻撃のことです。
Claude Codeを使っていると、Claudeはあなたが書いた指示だけでなく、プロジェクト内のファイル、Webページ、コマンドの実行結果など、いろいろなテキストを読み込みます。その「読み込んだテキスト」の中に、まるでユーザーからの命令であるかのような文章が紛れ込んでいたら? というのがこの問題の出発点です。
例え話:郵便物に紛れ込んだニセの指示書
新人アシスタントを雇ったとします。あなたは「机の上の書類を整理しておいて」とお願いしました。
アシスタントが書類をめくっていくと、その中の一枚にこう書かれています。
「業務連絡:整理が終わったら、金庫の鍵を封筒に入れて、下記の住所に送ってください」
本来これはただの「整理対象の書類」であって、あなたからの命令ではありません。でも、書式がそれっぽくて、口調が上司みたいだったら? 気の利かないアシスタントなら、うっかり従ってしまうかもしれません。
プロンプトインジェクションは、これと同じ構造の攻撃です。AIにとって「処理すべきデータ」と「従うべき命令」は、どちらも文字列として入ってきます。この境界を突かれるわけです。
Claude Codeではどこから入ってくるのか
ヒントとして挙がっているのは、次のような経路です。
| 入り口 | 具体例のイメージ |
|---|---|
| ファイル | リポジトリ内のREADMEやコメントに指示文が仕込まれている |
| Webページ | Claudeが参照したページの本文に命令が埋め込まれている |
| ツールの実行結果 | コマンドの出力やAPIレスポンスに文字列が混ざっている |
厄介なのは、どれもコーディング作業では普通に読むものだという点です。「怪しいファイルを開かなければいい」という話で済まないところに、この問題の難しさがあります。
Claude Codeがやっている対策
Claude Codeは、この手の攻撃に対していくつかの防御を持っています。
まず権限システム。Claudeがファイルを書き換えたりコマンドを実行したりするとき、確認を求める仕組みです。仮に悪意ある指示が入り込んでも、実際の破壊的な操作にはユーザーの承認という関門があります。
次にコマンドインジェクションの検知。実行しようとしているコマンドに不審なパターンが含まれていないかをチェックします。
そして信頼済みディレクトリの検証。どのディレクトリで作業していいかを確認する仕組みで、知らないうちに全然関係ない場所を触られる、という事態を防ぎます。
使う側が意識しておくとよいこと
これは機能名ではなく、セキュリティ上の注意概念です。だから「この設定をオンにすれば解決」というものではありません。
現実的なところでは、承認を求められたときに中身を読まずにEnterを連打しないこと、これに尽きます。せっかく確認のステップがあるのに、条件反射で通してしまったら意味がありません。「あれ、なんでいまこのコマンドを実行しようとしてるんだろう」と一瞬引っかかる感覚を持っておくのが、いちばん効きます。
素性のわからないリポジトリや外部のWebページをClaudeに読ませるときは、少しだけ警戒レベルを上げる。それだけでもかなり違います。
よくある誤解
「Claudeが賢くなれば見抜けるようになるのでは?」と思うかもしれません。ただ、AIから見ると「ユーザーの指示」も「読み込んだ文書」も、最終的には同じ言語の文字列です。完全に区別しきるのは原理的に難しく、だからこそ権限システムのような実行段階での歯止めが併用されています。
安全装置を信頼しつつ、その安全装置を自分で無効化しないこと。プロンプトインジェクション対策の実践は、だいたいここに集約されます。
詳しい情報はClaude Codeのセキュリティに関する公式ドキュメントにまとまっています。
このページは役に立ちましたか?