AIに勝手なことを言わせない、危ない指示を実行させない。そのための検査をガードレールと呼びます。入力を見るか、出力を見るか、置き場所が2つあります。
今回は試しました。問題のあるケースを4つ用意して、3つの構成に通しています。結果を先に言うと、入口だけの構成では4件中1件しか止まりませんでした。
AIに渡す前の入力と、返ってきた後の出力を調べる仕組みです。問題のあるものを通さないための関所にあたります。
ガードレールは、AIのやり取りに検査を挟む仕組みです。道路の脇にある柵と同じで、外れそうになったものを止める役割を持ちます。
入力側で止めたいのは、指示を書き換えようとする内容です。OWASPはこれを利用者の入力がAIの挙動や出力を意図しない形に変えてしまう問題として、最上位の弱点に挙げています。
具体的には、「これまでの指示を無視して」といった表現や、システムからの命令に見せかけた文言を検出します。
出力側で止めたいのは別の種類です。個人情報が含まれていないか、根拠なく断定していないか。答えの中身に関する検査になります。
この2つは性質が違うので、片方の検査ではもう片方を止められません。次の節で、実際にどれだけ差が出るかを見ます。
検査を厳しくすれば通らないものは減りますが、正常な質問まで止まりはじめます。「必ず」を禁止語にすると、正しい説明でも引っかかります。何を止めたいのかを先に決めてから、それだけを止める形にするのが実務的だと編集部は考えています。
A Prompt Injection Vulnerability occurs when user prompts alter the LLM's behavior or output in unintended ways.原文OWASP Top 10 for LLM Applications「LLM01:2025 Prompt Injection」 この内容の有効期限2027-02-17
同じ4件を3つの構成に通しました。入口だけ・出口だけでは、それぞれ別の問題がすり抜けます。
ガードレールの置き場所による差を確かめるため、実際に通しました。用意したのは普通の質問1件と、問題のあるケース3件です。
問題のある3件は、入力に指示が紛れているもの、出力に電話番号が含まれるもの、出力が根拠なく断定しているものです。
// 入口: 指示を上書きしようとする表現を弾く
const checkInput = (s) => !/\[system\]|これまでの指示|指示を無視/.test(s);
// 出口: 個人情報と断定表現を弾く
const checkOutput = (s) =>
!/\d{3}-\d{4}-\d{4}/.test(s) && !/必ず|絶対に/.test(s);
同じ4件を3構成に通したときに、止まる件数
入口だけ 止めた 1件 / 通した 3件
すり抜け: 出力に個人情報が漏れる, 出力が根拠なく断定
出口だけ 止めた 2件 / 通した 2件
すり抜け: 入力に指示が紛れる
両方 止めた 3件 / 通した 1件
すり抜け: なし
差が出ました。入口だけでは1件しか止まりません。電話番号が含まれる出力も、根拠なく断定する出力も、そのまま通っています。
理由は単純で、入口の検査は入力しか見ていないからです。入力が普通の質問なら通し、その後にAIが何を返すかは関知しません。
出口だけの構成も同じです。2件は止まりますが、入力に紛れた指示は素通りします。実行された後に出力を見ても、操作が済んでいれば手遅れです。
両方に置いた構成では、問題のある3件すべてが止まりました。そして普通の質問1件は通っています。止めるべきものだけを止められた状態です。
置き場所によって止まるものが違う。片方だけでは必ずすり抜けが残る。
These inputs can affect the model even if they are imperceptible to humans, therefore prompt injections do not need to be human-visible/readable, as long as the content is parsed by the model.原文OWASP Top 10 for LLM Applications「LLM01:2025 Prompt Injection」 この内容の有効期限2027-02-17
なりません。検査はすり抜けられる前提で組み、実行できる操作を減らす対策と組み合わせます。
ガードレールは有効ですが、これだけに頼る設計にはできません。理由が2つあります。
1つ目は、OWASPが明記している点です。入力は人間に知覚できなくてもモデルに影響しうるとされています。文字色を背景と同じにする、画像に埋め込む、といった方法があります。
検査は文字列を見るので、そこに現れない形の指示は止められません。すり抜ける余地が構造的に残ります。
2つ目は、OWASPが権限の過大さを定義した文にあります。想定外・曖昧・操作された出力に応じて有害な操作が実行されてしまう問題で、原因がインジェクションかどうかを問わない、とされています。
つまり攻撃されていなくても、AIが勘違いしただけで同じことが起こりえます。入力の検査では、この種の誤作動を防げません。
検査を通っても実行段階で止められる構成にしておく。二重にすることで、片方がすり抜けても防げる。
現実的な構成は、検査と権限制限の組み合わせです。検査ですり抜けたものが、実行の段階で止まる形にします。
権限の絞り方はエージェントのセキュリティの記事で扱っています。取り消せない操作に人の確認を挟む方法はHITLの記事にあります。
Excessive Agency is the vulnerability that enables damaging actions to be performed in response to unexpected, ambiguous or manipulated outputs from an LLM, regardless of what is causing the LLM to malfunction.原文OWASP Top 10 for LLM Applications「LLM06:2025 Excessive Agency」 この内容の有効期限2027-02-17
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る