security-guidance プラグイン(セキュリティガイダンス)

仕組み・概念
security-guidance プラグイン
セキュリティガイダンス
Claudeが自分で書いたコードを、書いたそばから3段階で自分で見直して、危ない書き方を見つけたら同じ会話の中で直させる追加部品(公式マーケットプレイスから入れるプラグイン)。入れたら自動で動くタイプで、叩くコマンドはない

Claudeが書いたコードをそのまま使っていいのか不安な人向け

Claudeにコードを書かせるけれど自分ではセキュリティの良し悪しを判断できない、という場面で入れておく。料理ブログのお問い合わせフォームのような『入力を受け取って表示する』機能を作らせるとき、家計簿アプリにログインを足すとき、GitHubで拾ったOSSを自分のパソコンにコピーした直後などに、危ない書き方を書いたそばから直させたいなら、公式マーケットプレイスから入れて常駐させておく

Claudeに頼んで書いてもらったコードを、そのまま自分のサイトに貼った経験はありませんか。動くのは分かる。でも「これ、危ない書き方が混じってないかな」は、自分にセキュリティの知識がないと判断できません。security-guidance プラグインは、その不安に効く追加部品です。Claudeが自分で書いたコードを、書いたそばから自分で見直して、危ない書き方を見つけたら同じ会話の中で直してくれる。eval(.innerHTML = みたいな、攻撃の入口になりやすい書き方が代表例です。

公式の説明はこう言い切っています。「インストールしてしまえば、あとは自動で動く。呼び出すものは何もないし、覚えておくべき別のコマンドもない」。つまり、これは叩いて使うコマンドではありません。一度入れたら裏で見張り続ける、常駐型の安全装置です。

噛み砕くと

このプラグインの立ち位置は、料理人の隣に立つ衛生チェック係に近いです。料理人(Claude)が手を動かしている横で、「いま生肉触った手でサラダ触りましたよね」を都度指摘する。しかも指摘するだけじゃなくて、その場で洗い直しまでさせる。それを毎回、自動でやってくれます。

大事なのは、この係は包丁を取り上げたりはしないこと。「危ないですよ、直してください」と料理人に伝えるだけで、止めはしない。直すかどうかはあくまで作業の流れの中で行われます。ここを「ブロックしてくれる門番」だと思い込むと、後で痛い目を見ます。

もう一つ。チェック係は料理人本人ではありません。別の目で見ます。これが地味に効きます。

大事な前提:変更履歴つきで保存しているプロジェクトじゃないと、半分しか動かない

このプラグインは3つの見張りを持っていますが、そのうち2つは「git で管理されたプロジェクト」でないと黙ってスキップされます。具体的には、ターンの終わりに走るチェックと、保存を区切る操作のときに走る深いチェック。この2つは「前の状態と今の状態の差分」を git の履歴から取るので、履歴がないと比べようがないんです。

残り1つ、編集のたびの文字列チェックだけはどこでも動きます。ただ、それだけだと取れる範囲はかなり狭い。だから実質、git で管理しているプロジェクトで使うものだと思っておくのが安全です。

あと前提がいくつか。Claude Code 本体が v2.1.144 以降、パソコンに Python 3.8 以降が入っていること。初回だけ、裏で専用の作業環境を作る処理が走ります。これにはネットワークが必要です。

「料理ブログのお問い合わせフォーム」を例に、実際の流れを見る

cooking-blog というフォルダで料理ブログを作っているとします。読者から感想をもらうために、お問い合わせフォームをClaudeに作らせてみます。プラグインはもう入っていて、裏で待機している状態です。

ステップ1: フォームを作ってと頼む

いつも通り日本語で頼むだけです。

> cooking-blog にお問い合わせフォームを作って。
  送信されたメッセージを確認画面にそのまま表示したい。

Claudeが contact.js みたいなファイルを書き始めます。ここまでは普段と何も変わりません。

ステップ2: 危ない書き方が紛れ込む

「送られたメッセージをそのまま画面に表示」を素直に実装すると、Claudeが element.innerHTML = userMessage のような書き方を選ぶことがあります。これ、便利なんですが、読者が入力欄に悪意あるコードを混ぜると、それがそのまま動いてしまう入口になります。DOM injection と呼ばれる古典的な穴です。

ステップ3: 書いた瞬間に1層目が反応する

ファイルに .innerHTML = が書き込まれた直後、一番浅いチェックが文字列として引っかけます。ここはモデルを呼ばないただの照合なので、追加の費用はゼロ。「危ないパターンですよ」という注意が、Claudeの次の一手の手元に差し込まれます。

ここで初心者がやりがちな勘違いを1つ。この注意は、あなたの画面に警告ダイアログとして出るわけではありません。あくまでClaudeに向けた指示として届きます。だから「警告が出ないけど大丈夫?」ではなく、Claudeが続きで直しに行くかを見るのが正しい見方です。

ステップ4: ターンの終わりに2層目が差分を見る

あなたへの返事を返し終えたタイミングで、そのターンで変わった分の差分が、裏でもう一つの別のClaudeに送られます。こちらは文字列照合では取れないもの担当。たとえば「確認画面のURLを外部から差し替えられる」みたいな、文脈を読まないと分からない穴を探します。

返事は遅れません。裏で走るので、あなたは普通に会話を続けられます。

ステップ5: 見つかった内容がClaudeに差し戻される

2層目が「ここ危ない」を見つけると、その内容がClaudeに差し戻されて、続きの手で直しに行きます。発見と、その直しの両方が、あなたの会話の中にそのまま見えます。.innerHTML = を、文字をそのまま安全に置く textContent に書き換える、みたいな修正がここで入ります。

ステップ6: 保存を区切るときに3層目が深く読む

Claudeが自分の手で変更を「ここまで保存」と区切る操作を実行すると、一番深いチェックが裏で走ります。コマンドでいうと git commit がそれです。これは周りのコードまで読んで、「危なく見えるけど実は前段で対策済みだから問題なし」みたいな判定までします。だから誤検知が少ない。

注意点。この3層目が見るのは、Claudeが自分で実行した保存だけです。あなたが自分の黒い画面から打った保存は対象外。ここは勘違いしやすいので覚えておいてください。

つまり security-guidance プラグインは何をしてくれるのか

  • やってくれる: Claudeが書いたコードを3段階で見直して、危ない書き方を見つけ、同じ会話の中で直させる。1層目は無料の文字列照合、2層目・3層目は別のClaudeが中身を読むレビュー
  • やってくれない: 書き込みや保存を止める(ブロックする)こと。どの層も止めはせず、見つけて直させるだけ。見逃すこともある
  • 意味が薄い場面: 変更履歴つきで保存していないフォルダ。2層目・3層目が黙ってスキップされ、浅い文字列チェックしか動かない。あと、あなたが自分の黒い画面から打った保存は3層目の対象外

使いどころ3シナリオ(具体題材で再現)

シナリオ1: 料理ブログのお問い合わせフォームを自分で作るとき

セキュリティの知識ゼロで cooking-blog に投稿フォームやコメント欄をClaudeに作らせる。こういう「入力を受け取って表示する」機能は、injection の温床になりやすい代表格です。プラグインを入れておけば、.innerHTML = みたいな書き方が出た瞬間に注意が飛んで、安全な書き方に直る。自分で穴に気づけない人ほど、入れる価値が大きい場面です。

シナリオ2: 家計簿アプリにログイン機能を足すとき

個人の家計簿アプリに「自分だけログインできる」仕組みを足す。ここで怖いのは、文字列照合では取れない穴です。たとえば他人のIDを指定すると他人の家計簿が見えてしまう、みたいな認可の抜け。2層目のレビューはこの手の「中身を読まないと分からない穴」を探すので、ログインや権限まわりを触るときは特に効きます。

シナリオ3: GitHubで拾ってきたOSSを自分のパソコンにコピーした直後

気になったOSSを自分のパソコンにまるごとコピーして、Claudeに機能を足してもらう。元のコードに何が仕込まれているか分からない状態です。ここはすでに変更履歴つきで保存されているプロジェクトなので、3層全部が動きます。Claudeが触った分を毎ターン・毎保存で見張ってくれるので、知らない土地で作業するときの保険になります。

初心者が踏みやすい落とし穴

  • 「ブロックしてくれる門番」だと思い込む。どの層も書き込みも保存も止めません。見つけて直させるだけで、見逃すこともあります。これ一個で安全が完成するわけではない、という前提で使ってください。
  • 変更履歴なしのフォルダで使って「効いてない」と勘違いする。git で管理していないと2層目・3層目は黙ってスキップ。浅いチェックしか動かないので、まず履歴つきで保存している状態にしてください。
  • 自分の黒い画面から保存して3層目を期待する。一番深いチェックが走るのは、Claudeが自分の手で保存を区切ったときだけ。あなたが手で打った保存は対象外です。
  • 叩くコマンドを探してしまう。これは呼び出すものがありません。入れたら自動で動くタイプ。/security-guidance みたいなコマンドは存在しないので探さないでください。
  • /security-review と同じものだと思う。あちらは「今のブランチを単発でチェックして」と頼んだときだけ走る、一回きりの検査。このプラグインは頼まなくても常駐して自動で見張る。役割が違います。
  • 費用がゼロだと思い込む。1層目の文字列照合は無料ですが、2層目・3層目は中身を読むぶんモデルの使用量を食います。普通のお願いと同じ扱いです。既定では Claude Opus 4.7 が使われます。
  • インストールしてすぐ今の会話で効くと思う。入れたあと /reload-plugins で今の会話に反映する必要があります。マーケットプレイスが見つからないと言われたら、先に /plugin marketplace add anthropics/claude-plugins-official を実行してください。

書き方

/plugin install security-guidance@claude-plugins-official
/reload-plugins
# マーケットプレイスが見つからない場合は先に:
# /plugin marketplace add anthropics/claude-plugins-official
# 入れたあとは自動で動く(呼び出すコマンドはない)

やってみるとこうなる

入力

/plugin install security-guidance@claude-plugins-official

出力例

(入れた後は自動で動く。例えばClaudeに contact.js を書かせたとき .innerHTML = が紛れ込むと、書いた直後に注意がClaudeの手元に差し込まれ、続きの手で textContent に書き換わる。発見と修正の両方が会話の中に見える。どの層も書き込み・保存は止めない)

このページに出てきた言葉

プラグイン
あとから足せる追加部品。本体(Claude Code)に入れると新しい機能が生える。これは公式マーケットプレイスから入れる
git で管理されたプロジェクト
変更履歴つきで保存しているプロジェクト。いつ何を書き換えたかを記録しているので「さっきと今で何が変わったか」を取り出せる
ターン
あなたが1回メッセージを送って、Claudeが作業して返事するまでの1往復
DOM injection
読者が入力欄に紛れ込ませた悪意あるコードが、画面表示の処理を通じてそのまま動いてしまう攻撃。フォームで起きやすい
.innerHTML =
受け取った文字を「画面の中身」としてそのまま流し込む書き方。入力に悪意があると一緒に動いてしまうため危険視される
textContent
受け取った文字を「ただの文字」として安全に表示する書き方。コードとして動かさないので injection の入口にならない
OSS
誰でも中身を見られて自由に使えるよう公開されているソフト

関連項目

公式ドキュメント

https://code.claude.com/docs/en/security-guidance

-

← 戻る