Skip to content

セキュリティ

セキュリティチェック機能

RepomixはSecretlintを使用して、ファイル内の機密情報を検出します:

  • APIキー
  • アクセストークン
  • 認証情報
  • 秘密鍵
  • 環境変数

設定

セキュリティチェックはデフォルトで有効になっています。

CLIで無効化する場合

bash
repomix --no-security-check

またはrepomix.config.json

json
{
  "security": {
    "enableSecurityCheck": false
  }
}

セキュリティ対策

  1. バイナリファイルの処理: バイナリファイルの内容は出力から除外されますが、完全なリポジトリ概要のためにそのパスはディレクトリ構造にリストされます
  2. Git対応: .gitignoreパターンを尊重します
  3. 自動検出: 以下を含む一般的なセキュリティ問題を検出
    • AWSの認証情報
    • データベース接続文字列
    • 認証トークン
    • 秘密鍵

リモートリポジトリ設定の信頼

--remote でリモートリポジトリをパックする場合、Repomixはそのリポジトリの設定を信頼できないコードとして扱います。

設定ファイルがコードである理由

repomix.config.* は単なるデータではありません。

  • repomix.config.ts / .js / .mjs は読み込まれる際に実行されます。
  • input.processors は一致したファイルに対して外部コマンドを実行します。
  • output.instructionFilePath../ を使ったincludeパターンは、リポジトリ外のファイルを読み取ります。

そのため、見知らぬリポジトリの未レビューの設定を読み込むことは、その Makefile を実行することや、ライフサイクルスクリプトを持つパッケージに対して npm install を実行することと同じです。

デフォルト: リモートの設定は読み込まれません

Repomixは、明示的に要求しない限り、クローンしたリポジトリの設定を無視します。グローバル設定とCLIオプションは引き続き適用されます。以下のフラグを一度も指定しなければ、このセクションの内容があなたに影響することはありません。

信頼を有効にする

bash
# CLIフラグを使用
repomix --remote user/repo --remote-trust-config

# 環境変数を使用
REPOMIX_REMOTE_TRUST_CONFIG=true repomix --remote user/repo

これにより、リモートの設定は自分で書いた設定と同じ信頼を得ます。信頼していて、内容を確認済みのリポジトリでのみ使用してください。

確認プロンプト

インタラクティブなターミナルでは、Repomixはこれから実行しようとしている設定を表示し、読み込む前に確認を求めます。

選択肢効果
はい、今回のみこの実行だけを信頼します。
はい、このリポジトリでは今後確認しない選択を記憶します(詳細は後述)。
いいえ(デフォルトの選択)設定を読み込まずに中止します。

表示される設定はリポジトリの作者が書いたものです。そのため、Repomixは表示内容が操作されないように保証しています。

  • 制御シーケンスとANSIシーケンスはエスケープされます。そのため、設定がターミナルを再描画したり、警告をスクロールで見えなくしたりすることはできません。
  • 双方向制御文字と不可視文字はエスケープされます。そのため、あなたが読んだテキストがそのまま実行されるテキストになります(Trojan Source)。
  • 出力は行数とバイトサイズの両方で上限が設定されます。そのため、水増しされた設定によって警告が画面外に押し出されることはありません。
  • 設定の各行にはプレフィックスが付与されます。そのため、設定がRepomix自身の区切り線やメッセージを偽装することはできません。
  • シンボリックリンクは拒否されます。 Gitはシンボリックリンクを保持するため、リポジトリはクローン先の外を指す repomix.config.json を含めることができます。Repomixは設定がクローンしたツリー内の通常ファイルであることを要求します。そうでなければ、確認したバイト列と実際に実行されるバイト列が一致しなくなるためです。

選択を記憶する

「今後確認しない」を選択すると、一時ディレクトリ($TMPDIR/repomix/trusted-remotes/)にマーカーが保存されます。このマーカーは自分のユーザーアカウントのみが読み書きできます。

このマーカーは内容に紐づけられており、承認した設定のハッシュ値を記録します。そのリポジトリが後で別の設定を配布した場合、ハッシュが一致しなくなり、再び確認が求められます。これは direnv allow と同じ考え方です。

紐づけの範囲

ハッシュはエントリの設定ファイルのみを対象とします。.ts / .js の設定は他のファイルを import でき、input.processors は外部スクリプトを呼び出せますが、どちらもハッシュの対象にはなりません。すでに信頼したリポジトリは、エントリファイル自体を変えずにそれらのファイルだけを変更できます。実行可能な設定がプロンプト内でそのようにラベル付けされているのはこのためです。「今後確認しない」は、読んだファイルだけでなく、そのリポジトリ全体への信頼として扱ってください。

マーカーは一時ディレクトリに保存されるため、OSがそれをクリアすると選択も失効します。これは意図的な設計です。「再確認」の方向へ失効することが安全だからです。

プロンプトがスキップされる場合

状況動作
--force を指定した場合確認なしで信頼されます。このフラグはその結果を受け入れることを意味し、通知が標準エラー出力に表示されます。
非インタラクティブなシェル(CI、パイプなど)確認なしで信頼され、既存の自動化はそのまま動作します。通知が標準エラー出力に表示されます。
すでに信頼済みのリポジトリ設定が変更されていない限り、確認なしで読み込まれます。
絶対パスの --config を使用した場合クローンしたリポジトリ自身の設定は読み込まれないため、確認するものがありません。
クローンに設定ファイルがない場合信頼する対象がありません。

--stdout を使用している場合、または標準出力がリダイレクトされている場合は、プロンプトを表示できません。この場合、Repomixは設定を黙って信頼する代わりに、対処方法を示すエラーを報告します。

推奨事項

  1. リポジトリ自身の設定が必要な場合を除き、--remote-trust-config はオフのままにしてください。
  2. 回答する前に、プロンプトに表示された設定内容、特に input.processors../ を使ったパスを確認してください。
  3. 自分が管理していないリポジトリでは「はい、今回のみ」を選んでください。
  4. CIでは、プロンプトが保護してくれないことを忘れないでください。パックするリビジョンを固定し、事前にレビューしてください。

セキュリティチェックで問題が見つかった場合

出力例

bash
🔍 Security Check:
──────────────────
2 suspicious file(s) detected and excluded:
1. config/credentials.json
  - Found AWS access key
2. .env.local
  - Found database password

ベストプラクティス

  1. 共有する前に必ず出力を確認
  2. .repomixignoreを使用して機密性のあるパスを除外
  3. セキュリティチェックを有効に保つ
  4. 機密ファイルをリポジトリから削除

セキュリティ問題の報告

セキュリティ脆弱性を発見した場合は

  1. パブリックなイシューは作成しないでください
  2. メール: koukun0120@gmail.com
  3. またはGitHub Security Advisoriesを使用

関連リソース

Released under the MIT License.