◉CLAUDE LABEN
●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました●2.1.301 — vim の % モーション、VS Code パネルでの LaTeX 数式表示、使用量上限待ちのリトライ監視の上限が入りました(10/15)●2.1.299 — 200K トークン超で約54分放置した会話はアイドル圧縮。MCP の許可ルールは名指ししたサーバーだけに一致します●SONNET 4.5 — Claude API での提供終了は 11/30、残り45日。移行先は Sonnet 5.5●WINDOWS — 日本語の環境でだけフックが黙って壊れる報告があり、文字コードの確認が呼びかけられています●FAST MODE — Opus 5.5 の Fast mode がリサーチプレビューを終え、ベータヘッダーが不要になりました(10/15)●NEW — Cowork に渡したフォルダの先頭に、十行の約束ファイルを置いてみました
記事一覧/Claude Code
⟐ Claude Code/2026-07-17上級

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

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

Claude Code265パーミッション3セキュリティ21Unicode自動運用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/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

⟐ Claude Code2026-10-14
onFailure を block にしても、jq が無い環境では公式例の rm -rf ブロックは素通りしました
PreToolUse の門番フックは、落ちたときに通すのか止めるのか。公式例を jq の無い環境で走らせると exit 0 で素通りしました。終了コード10通りの実測、直し方、settings.json を走査して素通りを洗い出すスクリプトをまとめます。
⟐ Claude Code2026-09-05
拒否ルールが見ていたのはファイル名で、そこへ届く経路ではありませんでした
deny に書いた 1 行が、同じファイルへ届く別の書き方を素通りさせていました。経路を機械的に並べて、版を上げた日に効きを確かめる小さな検査表の作り方をお伝えします。
⟐ Claude Code2026-08-21
Claude Code の read deny が許可フォルダの内側まで届いていなかった話
秘密ファイルとソースが同じツリーに同居する個人開発環境で、permissions.deny の Read ルールが実際にどのファイルまで届いているかを数え直した記録です。棚卸し用のスクリプトつき。