CLAUDE LABEN
APPLY — ant CLI v1.30.0 に ant apply が入りました。エージェント・環境・スキル・メモリストア・デプロイメントを、リポジトリのファイルから作成・更新できますLOCKFILE — 書き出される claude-lock.json は必ずコミットしてください。忘れると、実行のたびに同じリソースが新しく作られていきますPLAN — ant apply は適用の前に計画を表示し、承認を挟みます。CI で無人実行するなら、この承認をどう扱うかを先に決めておくことですPRICING — Claude Sonnet 5 の 3 ドル / 15 ドルへの値上げは実施されていません。導入価格の 2 ドル / 10 ドルがそのまま標準価格になりましたSOURCE — 価格と版番号は二次ニュースに誤りが混じります。platform.claude.com のリリースノートで裏を取ってから書くようにしていますBETA — Agent Skills と Skills API はベータを抜け、skills-2025-10-02 ヘッダが不要になりました。Files API はヘッダの有無でレスポンス形式が変わる点に注意ですAPPLY — ant CLI v1.30.0 に ant apply が入りました。エージェント・環境・スキル・メモリストア・デプロイメントを、リポジトリのファイルから作成・更新できますLOCKFILE — 書き出される claude-lock.json は必ずコミットしてください。忘れると、実行のたびに同じリソースが新しく作られていきますPLAN — ant apply は適用の前に計画を表示し、承認を挟みます。CI で無人実行するなら、この承認をどう扱うかを先に決めておくことですPRICING — Claude Sonnet 5 の 3 ドル / 15 ドルへの値上げは実施されていません。導入価格の 2 ドル / 10 ドルがそのまま標準価格になりましたSOURCE — 価格と版番号は二次ニュースに誤りが混じります。platform.claude.com のリリースノートで裏を取ってから書くようにしていますBETA — Agent Skills と Skills API はベータを抜け、skills-2025-10-02 ヘッダが不要になりました。Files API はヘッダの有無でレスポンス形式が変わる点に注意です
記事一覧/Claude Code
Claude Code/2026-07-17上級

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

チャットへ中継した確認プロンプトに双方向上書き文字やゼロ幅文字を混ぜて通す実験をしました。NFKC正規化では検知率が0%だった理由、日本語コミットメッセージを止めてしまった素朴な規則の失敗、見せる文字列と照合する文字列を分けて細工を全件止める実装までを記録します。

Claude Code250パーミッション3セキュリティ20Unicode自動運用17

プレミアム記事

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

個人開発で回している 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/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

Claude Code2026-07-18
プランモードを「読むだけ」と信じていた — 前提を機構で確かめ直す
Claude Code 2.1.212 で、プランモードがファイルを変更する Bash を許可プロンプトも canUseTool も通さず実行していた不具合が修正されました。前提が崩れていた期間に何が起きうるのか、手元で確かめる方法と、モード名に安全性を預けない設計をまとめます。
Claude Code2026-09-05
拒否ルールが見ていたのはファイル名で、そこへ届く経路ではありませんでした
deny に書いた 1 行が、同じファイルへ届く別の書き方を素通りさせていました。経路を機械的に並べて、版を上げた日に効きを確かめる小さな検査表の作り方をお伝えします。
Claude Code2026-08-21
Claude Code の read deny が許可フォルダの内側まで届いていなかった話
秘密ファイルとソースが同じツリーに同居する個人開発環境で、permissions.deny の Read ルールが実際にどのファイルまで届いているかを数え直した記録です。棚卸し用のスクリプトつき。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます