# 보안 · 비밀정보 규칙 모든 파일에 적용한다. ## 커밋 금지 목록 `.gitignore`에 있는 항목을 예외 없이 지킨다: `.mcp.json`(Gitea 토큰 포함), `.env*`, `*.pfx`, `*.p12`, `*.key`, `*.isproj.local.json`, `*.bak`, `output/samples/`, `node_modules/`, `target/`. 이 파일들의 내용을 문서·주석·테스트·로그에 복사하지도 않는다. `src/.work/`는 로컬 작업 폴더다(미추적). 그 안의 스크립트·토큰·커밋 메타데이터를 소스나 문서에 인용하지 않는다. ## 시스템 변경 금지 제작기와 테스트는 다음을 **절대 자동 수행하지 않는다**. 필요한 경우 사용자가 직접 실행할 스크립트와 안내를 출력한다. - 빌드 PC의 실제 레지스트리 수정(`offreg.dll`로 오프라인 hive만 생성) - 인증서 신뢰 저장소 등록(`LocalMachine\TrustedPeople`), 인증서 개인 키 내보내기 - MSIX 설치·제거, Windows 개발자 모드 변경 - Windows SDK·인증서·런타임 자동 설치 - 사용자 프로젝트 파일의 자동 변환·일괄 수정 ## 도구 실행 - 허용 도구는 절대 경로의 `makeappx.exe`, `signtool.exe`, 저장소 내 PowerShell 서명 스크립트. 파일 이름을 대소문자 무시로 검사하고 실행 전후 SHA-256을 계획 값과 비교한다. - 인자는 배열로 전달한다. 셸(`cmd /c`, `powershell -Command "<문자열 결합>"`)로 사용자 입력을 넘기지 않는다. - 자식 프로세스는 Job Object에 붙여 취소·타임아웃 시 함께 종료한다. ## 경로 - 사용자 입력 경로는 `safe_relative`로 검사한다: `..`, 절대 경로, 예약 장치 이름(`CON`, `COM1`), 제어 문자, `\:<>"|?*` 거부. - reparse point(심볼릭 링크·junction)는 `reject_links`로 읽기·쓰기 모두 거부한다. - 소스 폴더가 `.work`, `releases`를 포함하거나 그 아래면 거부한다(출력 재수집 방지). - 작업 로그와 검증 JSON에는 로컬 절대 경로가 남는다. 외부 공유 전에 사용자에게 알린다. ## 프런트엔드 - CSP `default-src 'self'` 유지. 외부 리소스 로드 금지. - 모든 동적 HTML은 이스케이프. 이벤트는 `addEventListener`. - Tauri 명령은 ID·선택지만 받고 경로를 받지 않는다. 새 명령마다 `capabilities/main.json`에 개별 허용을 추가하고 와일드카드 권한을 쓰지 않는다.