CLAUDE LABEN
TEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認くださいTEACHERS — AnthropicがClaude for Teachersを公開。米国K-12の認証済み教員に、プレミアム機能と授業向けスキル、全50州の学習指導基準に沿ったカリキュラム連携を無償提供しますADMIN — Claude Enterprise全組織でAdmin APIがベータ提供に。メンバーと招待の操作はベータヘッダー不要、グループとカスタムロールは専用ヘッダーが必要ですM365 — Microsoft 365コネクタに書き込みツールが追加。メールの下書き・送信・整理、カレンダー操作、OneDriveとSharePointのファイル作成・更新まで任せられますMCP — --mcp-configや.mcp.jsonのサーバ単位request_timeout_msが無視され、新規セッションで60秒既定のままタイムアウトする不具合が修正されましたSUBAGENT — --forward-subagent-textとCLAUDE_CODE_FORWARD_SUBAGENT_TEXTが追加。サブエージェントのテキストと思考をstream-json出力に含められますDEADLINE — 7月24日にOpus 4.7のfastモードが削除されます。残り7日、speed: "fast" はエラーになるためOpus 4.8への移行をご確認ください
記事一覧/Claude Code
Claude Code/2026-07-17上級

承認したのは、私が読んだ文字列ではなかった — 確認プロンプトの中継を細工文字で検証する

チャットへ中継した確認プロンプトに、双方向上書き文字やゼロ幅文字を混ぜて通してみました。NFKC正規化の検知率が0%だった理由と、誤検知0%で細工を全件止めるための実装を記録します。

Claude Code196パーミッション2セキュリティ11Unicode自動運用15

プレミアム記事

夜間の自動更新を回すようになってから、承認の判断だけが私の手元に残りました。

個人開発で回している Dolice Labs の4サイトは、記事の生成からゲート検査、push までを無人で進みます。危ういところに差しかかったときだけ、確認プロンプトが手元のチャットに流れてきて、私がそれを読んで通す。外出先で、画面の一行だけを読んで承認したことも一度や二度ではありません。

先日の Claude Code の更新に、短い一文がありました。チャットチャネルに中継されるパーミッションプレビューで、双方向上書き文字・ゼロ幅文字・見た目が似た引用符を無害化するようになった、というものです。ツール入力によって承認メッセージの見え方を変えられなくするための修正だと書かれていました。

読んだところで、手が止まりました。

見え方を変えられる。つまり私はこれまで、実行される文字列そのものではなく、実行される文字列の見え方を承認していたことになります。この二つは、普段は一致しています。一致していると信じる理由は、特にありませんでした。

手元の中継に細工した文字列を通してみたら、思っていたのと違う結果が出ました。その記録です。

「見え方」を変える細工は、どこから来るのか

文字列の見え方と中身がずれるのは、Unicode に「表示のための指示」を持つ文字が含まれているからです。表示を担当する側はその指示に従い、実行を担当する側は指示を無視してバイト列だけを見ます。この非対称が、そのまま隙になります。

細工符号位置何が起きるか
双方向上書き(RLO)U+202E以降の文字が右から左に描画され、末尾が入れ替わって見える
ゼロ幅スペースU+200B幅を持たずに語の途中に潜り込む。目視でも正規表現でも落ちる
ゼロ幅非接合子U+200C同上。フラグ名の内部に挟むとオプションが別物になる
見た目が似た引用符U+201C / U+201Dクオートされているように見えて、シェルにはただの文字
ホモグリフU+043F 等キリル文字の п をラテン文字の n に見せる。別の識別子になる
改行U+000Aプレビューに偽の行を足せる。「承認済み」という嘘の一行を差し込める

最後の改行が、私には一番こたえました。細工の目的は、危険なコマンドを安全に見せることだけではありません。承認する人間に「もう誰かが確認した」と思わせることでも達成されます。攻撃対象は端末ではなく、画面を読んでいる私です。

上流の修正が守るのは、上流の画面まで

ここで整理しておきたいのは、信頼境界がどこに引かれているかです。

Claude Code 側の修正は、Claude Code が組み立てるパーミッションプレビューを無害化します。これは正しい対処で、既定の経路を使っている限り効きます。

私の構成は、そこから一歩はみ出していました。無人実行の結果を stream-json で受け取り、確認が必要な要求を自前のボットで整形して、チャットに流しています。整形しているのは私のコードです。つまり上流が無害化した文字列を、私が受け取り直して、私のレンダラで描き直している。上流の修正は、私のレンダラの中までは届きません。

境界を線で書くと、こうなります。

区間守る主体私の構成での状態
ツール入力 → Claude Code のプレビューClaude Code(修正済み)✅ 保護される
stream-json → 自前ボットの整形⚠️ 素通しだった
ボット → チャットの描画チャットクライアント⚠️ クライアント任せ
承認 → 実際の実行⚠️ 照合していなかった

プロンプトインジェクション対策として、モデルに渡す入力を洗う話はよく語られます。あれはモデルを守るための処理です。ここで問題になっているのは向きが逆で、モデルから人間へ流れるチャネルです。承認者を守る側の処理は、私の構成では誰も担当していませんでした。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
細工文字6種を4層に通した実測: そのまま中継0%・制御文字除去50%・NFKC正規化0%・エスケープ表示100%
素朴な非ASCII規則は日本語のコミットメッセージを40%の確率で止める。スクリプト許可制なら誤検知0%で検知100%
見せる文字列と照合する文字列を分ける承認トークンの実装(コピーして動く形)
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Claude Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-07-17
夜間に回した並列サブエージェントの記録が、追えなくなった — --forward-subagent-text で増えたログを絞り直す
サブエージェントのテキストと思考を stream-json へ流せるようになった一方で、無人実行のログ量は跳ね上がります。実測値をもとに、事後解析に効く記録だけを残す3層の保存方針と相関IDの設計をまとめました。
Claude Code2026-07-16
許可ルールを積み上げたセッションが毎ターン重くなる — ルールセットの棚卸しと、安全性を保ったまま数を減らす設計
deny/ask ルールを増やすほど毎ターン遅くなる問題が 2.1.209 で修正されました。ただしルール設計そのものの負債は残ります。棚卸しスクリプト・被覆検出・ターン時間の実測手順と、列挙型から接頭辞型へ移す設計をまとめます。
Claude Code2026-07-07
検知はできても、鳴りすぎて気づけなくなった — 個人運用のアラートを一通の『起こす価値のある報せ』に絞るまで
無音の不発を検知できるようにした途端、今度は通知が鳴りすぎて麻痺しました。事象ではなく行動を単位にアラートを畳み、ヒステリシスと静音時間、段階的エスカレーションで『起こす価値のある報せ』だけを残すまでの設計メモです。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →