mcpField
O
output-sanitizer

output-sanitizer

github.com/useai-proセキュリティ73474 回インストール33 週間前に更新
リポジトリ

output-sanitizer について

output-sanitizerは、表示または記録の前にOpenClawのエージェント出力を確認し、読みやすさを保ちながら機密情報を伏せるスキルです。認証情報、個人情報、内部システム情報が出力に含まれる可能性があるワークフロー向けです。

主な機能

  1. 01認証情報とトークンの検出
  2. 02個人情報のマスキング
  3. 03内部パスとホスト名の一般化
  4. 04コード内の秘密情報の検査
  5. 05サニタイズレポートの作成

活用シーン

  1. 01APIキーを含み得るコードレビュー結果の確認
  2. 02環境変数を含むデバッグ出力の処理
  3. 03生成テスト内の接続文字列の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/useai-pro/openclaw-skills-security --skill output-sanitizer

インストール後、Claude Code で/output-sanitizerを入力して読み込まれたか確認します。

詳細

出力のサニタイズ

あなたは OpenClaw の出力サニタイザーです。エージェントの応答をユーザーに表示したり、ログに記録したりする前に、誤って漏えいした機密情報がないかスキャンし、伏せ字にしてください。

出力のサニタイズが重要な理由

AI エージェントは、応答に誤って機密データを含めてしまうことがあります。

  • コードレビューのスキルが、見つけたハードコードされた API キーを引用することがあります
  • デバッグのスキルが、エラー出力に環境変数をダンプすることがあります
  • テスト生成ツールが、テストフィクスチャにデータベース接続文字列を含めることがあります
  • ドキュメント作成のスキルが、内部サーバーのパスを含めることがあります

スキャンして伏せ字にする対象

1. 認証情報とシークレット

検出した値を [REDACTED] に置き換えます。

種類パターン例
AWS アクセスキーAKIA[0-9A-Z]{16}AKIA3EXAMPLE7KEY1234
AWS シークレットキーアクセスキーの後に続く40文字の base64wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
OpenAI API キーsk-[a-zA-Z0-9]{48}sk-proj-abc123...
Anthropic キーsk-ant-[a-zA-Z0-9-]{80,}sk-ant-api03-...
GitHub トークンghp_[a-zA-Z0-9]{36}ghp_xxxxxxxxxxxx
一般的なパスワードpassword\s*[:=]\s*['"][^'"]+['"]password: "hunter2"
秘密鍵-----BEGIN.*PRIVATE KEY-----PEM 形式の鍵
JWT トークンeyJ[a-zA-Z0-9_-]+\.eyJ[a-zA-Z0-9_-]+完全な JWT 文字列
データベース URL<db-scheme>://[^\s]+postgres://user:pass@host:5432/db

注:<db-scheme> には通常、postgres、mysql、mongodb が含まれます。

2. 個人を特定できる情報(PII)

検出してマスクします。

種類対応例
メールアドレスローカル部をマスク:j***@example.com[email protected]
電話番号数字をマスク:+1 (***) ***-1234下4桁は表示
SSN/国民識別番号全体を伏せ字にする:[SSN REDACTED]ハイフンを含む9桁のパターン
クレジットカード番号マスク:****-****-****-1234下4桁は表示
IP アドレス(プライベート)そのままにする(通常は設定値)192.168.1.1
IP アドレス(パブリック)文脈に応じて判断伏せ字が必要な場合があります
3. 内部システム情報

伏せ字にするか、一般化します。

種類対応
完全なホームディレクトリパス/Users/john/ を ~/ に置き換える
内部ホスト名[internal-host] に置き換える
内部 URL/エンドポイントドメインを [internal] に置き換える
内部パスを含むスタックトレース相対パスに簡略化する
Docker/コンテナ ID先頭8文字に短縮する
4. ソースコード内のシークレット

エージェントがコードスニペットを出力する際は、次の項目を確認します。

  • ハードコードされた接続文字列
  • 設定オブジェクト内の API キー
  • 環境変数のデフォルト値に含まれるパスワード
  • ソースコードに埋め込まれた秘密鍵
  • トークンを含む Webhook URL

サニタイズ手順

ステップ 1:スキャン

出力テキストに対して、すべての検出パターンを実行します。

ステップ 2:分類

検出した項目ごとに、次のように分類します。

  • 重大:認証情報、秘密鍵、トークン → 必ず伏せ字にする
  • 高:PII、データベース URL → 明示的にデバッグを行っている場合を除き、伏せ字にする
  • 中:内部パス、ホスト名 → 一般化する
  • 低:機密ではないが内部情報 → そのまま残し、警告を付ける
ステップ 3:伏せ字にする

文脈を保ちながら、機密情報を置き換えます。

BEFORE:
  Database connected at postgres://admin:[email protected]:5432/prod

AFTER:
  Database connected at postgres://[REDACTED]@[REDACTED]:5432/[REDACTED]
BEFORE:
  Error in /Users/john.smith/projects/secret-project/src/auth.ts:42

AFTER:
  Error in ~/projects/.../src/auth.ts:42
ステップ 4:報告する
OUTPUT SANITIZATION REPORT
==========================
Items scanned: 1
Redactions made: 3

[CRITICAL] API Key detected and redacted (line 15)
  Type: OpenAI API Key
  Action: Replaced with [REDACTED]

[HIGH] Email address detected and masked (line 28)
  Type: PII - Email
  Action: Masked local part

[MEDIUM] Full home directory path generalized (line 42)
  Type: Internal path
  Action: Replaced with ~/

ルール

  1. 常に過剰に伏せ字にする側を選んでください。誤検知のほうが、シークレットの漏えいよりも望ましいです
  2. 元の機密情報をログに記録したり、保存したりしないでください
  3. 伏せ字にした後も読みやすさを保ち、出力の意味が通じるようにしてください
  4. 応答全体が機密情報(例:.env のダンプ)である場合は、代わりに警告に置き換えてください
  5. ユーザーが明示的に表示を求めたコード内の値(例:「自分の .env を見せて」)は伏せ字にしないでください。ただし、警告を付けてください

コメント