Skip to content

보안

보안 검사 기능

Repomix는 Secretlint를 사용하여 파일 내의 민감한 정보를 감지합니다:

  • API 키
  • 액세스 토큰
  • 인증 정보
  • 개인 키
  • 환경 변수

설정

보안 검사는 기본적으로 활성화되어 있습니다.

명령행에서 비활성화:

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를 전달한 경우확인 없이 신뢰됩니다. 이 플래그는 결과를 사용자가 감수한다는 의미이며, stderr에 알림이 출력됩니다.
비대화형 셸(CI, 파이프)확인 없이 신뢰되어 기존 자동화가 유지됩니다. stderr에 알림이 출력됩니다.
이미 신뢰한 저장소설정이 변경되지 않은 한 확인 없이 로드됩니다.
절대 경로 --config를 사용하는 경우클론한 저장소 자체의 설정은 로드되지 않으므로 확인할 대상이 없습니다.
클론에 설정 파일이 없는 경우신뢰할 대상이 없습니다.

--stdout을 사용하거나 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 보안 권고 사용

관련 리소스

Released under the MIT License.