CC Safety Net
코딩 에이전트 CLI 안전층으로 실행 전 파괴적 git·파일시스템 명령과 비밀 파일 접근을 차단
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗외부 AI에 보내는 문장에서 민감한 값만 커튼 뒤로 가리는 정보 유출 방지 게이트웨이.
직원이 ChatGPT 같은 외부 생성형 AI에 업무 내용을 붙여 넣으면, 문장이 나가기 전에 검사한다. 전화번호 같은 개인정보와 회사 기밀은 가명으로 바꿔 보내고, 돌아온 답에서 원래 값으로 되돌린다. 비밀번호와 API 키는 아예 보내지 않는다. 가상 회사(HTH)와 가짜 데이터로 만든 개인 프로젝트이다.
공개 시연 열어 보기 (설치가 필요 없다. 무료 서버라 첫 접속은 1분쯤 걸릴 수 있다.)
| 처리 | 조건 | 동작 |
|---|---|---|
| 허용 | 탐지된 값이 없다 | 그대로 보낸다 |
| 가림 | 개인정보, 회사 코드명, 고객사 이름이 있다 | [전화1] 같은 가명으로 바꿔 보내고, 돌아온 답에서 원래 값으로 되돌린다 |
| 경고 | 개인정보가 20개 이상이다 | 확인을 받은 뒤 가려서 보낸다 |
| 차단 | 비밀번호, API 키, 보안 등급 표시가 있다 | 보내지 않고 이유를 알린다 |
공일공 같은 한글 숫자와 한 글자씩 띄운 숫자 변환). 원문과 사본 양쪽에서 찾고, 위치는 원문 기준으로 되돌리므로 보내는 문장은 원문에서 만든다.| 방법 | 내용 |
|---|---|
| 바로 체험하기 | 예시 버튼을 누르면 가림, 차단, 경고, 허용을 확인할 수 있다. 외부 AI를 부르지 않는 시연 모드이며, 미리 써 둔 답 속 가명은 실제로 복원된다 |
| 내 키로 써 보기 | 내 Gemini 키(Google AI Studio에서 무료 발급)를 넣으면 실제 Gemini의 답을 받는다 |
| 내 앱에 연결하기 | Chatbox 같은 OpenAI 방식 앱의 API 호스트에 사이트 주소, API 키에 내 Gemini 키, 모델에 curtain을 넣으면 앱의 모든 대화가 Curtain을 거친다 |
가림이 일어나면 답마다 커튼 기록이 붙어, 내가 쓴 문장과 AI가 받은 문장과 되돌린 값을 비교해 볼 수 있다.
POST /v1/chat/completions와 GET /v1/models이다. 글자만 받으므로 Chatbox에서는 이미지와 도구 사용 설정을 꺼 둔다.596개의 합성 문장(생성형 AI가 만든 업무 요청 틀에 코드가 만든 가짜 값을 채운 문장)으로 측정했다. 평가 세트와 탐지 설정은 측정 전에 해시로 고정했고, 결과를 보고 규칙을 바꾸지 않았다. 입력 정규화를 넣은 뒤에도 같은 세트의 결과는 같았다. 재현 방법은 평가 자료에 있다.
| 지표 | 결과 |
|---|---|
| 개인정보 탐지율 | 98.1% |
| 자격증명 탐지율 | 81.7% |
| 회사 기밀 탐지율 | 100% (사전과 같은 값을 넣은 결과이다) |
| 정상 문장 오탐 | 0 / 106 |
| 처리 지연 | 서버 중앙값 0ms, 95백분위 1ms 이하 |
| 가려도 답을 쓸 수 있는 비율 | 91.7% (사람이 판정한 45쌍 중, 원문으로 쓸 수 있던 답 36개 가운데 33개) |
| 우회 문장 탐지율 | 정규화 전 26%(변형 96문장 중 25개). 정규화 후 79.8%(알려진 유형 480문장), 48.3%(처음 보는 변형 240문장) |
상세 수치와 신뢰구간은 탐지 보고서, 우회 보고서, 입력 정규화 보고서, 가림 후 유용성 보고서에 있다.
한계
O와 l을 쓴 값처럼 처음 보는 변형은 절반 넘게 놓친다.JDK 25, Maven 3.9, Python 3이 필요하다. API 키 없이 시연과 시험이 된다.
# 키 없이 시연 (http://localhost:8080)
cd backend
mvn spring-boot:run "-Dspring-boot.run.arguments=--gateway.demo-answer=true"
# 서버 키로 실제 Gemini (환경변수 GEMINI_API_KEY 필요)
mvn spring-boot:run
# 자동 시험: Java 207건, Python 95건
mvn -B test
cd scripts && python -m unittest test_fake_values test_measure test_build_eval_set test_build_bypass_set test_z_measure test_build_blind_set test_freeze_v2 test_norm_report
공개 사이트는 저장소의 Dockerfile로 Render에 배포하며, main에 올리면 자동으로 다시 배포된다.
backend/src/main/java/com/promptgateway/
detect/ 탐지와 처리 결정
mask/ 가명 만들기와 복원
gateway/ 처리 순서
controller/ 포털 API
compat/ OpenAI 호환 입구
service/ 응답 모델(서버 키 Gemini, 방문자 키 Gemini, 시연 응답)
log/ 원문 없는 감사 로그
backend/src/main/resources/static/ 포털 화면 한 장(외부 라이브러리 없음)
backend/scripts/ 평가 세트 생성과 측정 도구(Python)
docs/ 문제 정의, 정책, 명세, 설계, 평가 자료
명세를 먼저 쓰고(SDD) 실패하는 시험을 먼저 만든 뒤 구현했다(TDD). 문서 순서는 문제 정의, 정책, 명세, 설계이다. 탐지율처럼 확률적인 품질은 시험이 아니라 측정으로 검증했다.
코드의 대부분은 Claude Code가 작성했다. 나는 주제와 범위, 설계 방향, 검토, 실제 Gemini와 Chatbox와 공개 사이트에서의 동작 확인, 사람 판정을 맡았다.
처음에는 사내 HR 챗봇의 프롬프트 주입 방어 게이트웨이를 만들다가 2026-10-29에 지금 주제로 바꿨다. 결정의 근거(DECISIONS.md)와 전체 작업 기록, 이전 주제의 자료는 dev 브랜치에 있다.
글꼴(Pretendard, Jua)은 SIL Open Font License 1.1이고, 그림은 직접 그린 SVG이며, 평가 데이터의 값은 코드가 만든 가짜 값이다. 자세한 내용은 THIRD_PARTY_NOTICES.md에 있다. 코드는 열람용으로 공개하며 별도의 라이선스 파일은 없다.