~/VibeHandbook
무료 PDF

챕터 18 · 07

보안 리뷰 게이트

위의 모든 것을 걱정거리에서 프로세스로 바꾸는 습관 하나가 여기 있다: 출시 전에, AI가 자기 코드를 공격하게 만들라. 기능을 쓴 모델은 보통 그 안의 구멍을 찾아낼 수 있다 — 다만 시키지 않으면 안 할 뿐이다. 빌더에서 공격자로 뒤집어라:

너는 이 엔드포인트를 작성했다. 이제 그것을 깨뜨리려는 공격자처럼 행동하라.
악의적인 사용자가 다음을 할 수 있는 모든 방법을 나열하라:
  - 자기가 봐서는 안 되는 데이터를 읽거나 수정 (인가 구멍)
  - 입력을 통해 코드 주입 (SQL injection, XSS, command injection)
  - 빠진 검증이나 rate limit을 악용
각각에 대해 그것을 익스플로잇하는 정확한 요청을 보여주고, 그다음 해결책을 보여라.
나를 안심시키지 말라 — 취약점이 있다고 가정하고 그것을 찾아라.

그 마지막 줄이 중요하다: 중립으로 두면 AI는 "안전해 보인다!"라고 말하는 경향이 있다. 결함이 존재한다고 가정하라고 시키면, 실제로 찾으러 나선다. 그 적대적 패스를, 사용자에게 노출되는 무엇에든 돌리는 짧은 출시 전 체크리스트와 짝지어라:

  • 모든 엔드포인트가 사용자가 로그인했는지뿐 아니라 인가를 점검한다
  • 모든 데이터베이스 쿼리가 parameterized다 — 문자열로 만든 없음
  • 페이지에 렌더링되는 사용자 입력이 이스케이프된다 (raw HTML 주입 없음)
  • 클라이언트 코드에 비밀값 없음, 저장소에 커밋된 것도 없음
  • .env가 gitignore되어 있음; 새어나간 키는 모두 로테이션됨
  • 파일 업로드가 타입과 크기를 검증하고 생성된 이름을 사용한다
  • 새 의존성이 실제 존재 여부와 평판을 눈으로 확인받았다

통과하지 않으면 아무것도 출시되지 않는 시퀀스로 게이트를 그려보라. AI가 빌더에서 공격자로 모자를 바꿔 쓰고, 그다음 자동 스캔이 사람의 패스가 놓칠 수 있는 것을 받쳐준다:

  기능 코드   
       │
       ▼
 ┌──────────────────┐   "버그가 있다고 가정하고 찾아라" 
 │ 적대적 검토      │   authz 구멍 · 인젝션 · 입력 검증 검토
 │ (AI=공격자)      │
 └────────┬─────────┘
          │ 문제 발견? ── 예 ──▶ 수정 ──┐   
          │ 아니오                         │
          ▼                                │
 ┌──────────────────┐ ◀─────────────────── ┘
 │ 자동화 게이트    │   시크릿 스캔(gitleaks) · npm audit 
 │ (CI, 매 푸시)    │   파라미터화? · 시크릿이 클라이언트 밖에?
 └────────┬─────────┘
          │ 전부 초록
          ▼
        SHIP ✓     ── 빨간불 하나라도 푸시 차단 ──   

그리고 푸시하기 전에 scanner를 돌려라 — gitleaks 같은 도구(혹은 당신 플랫폼의 내장 스캐닝)는 당신의 코드와 히스토리에서 키처럼 생긴 것들을 grep한다. 이 목록에서 가장 비싼 실수에 대한 명령어 하나짜리 안전망이고, AI를 시켜 (컨티뉴어스 인테그레이션 — 당신이 코드를 푸시할 때마다 자동으로 점검을 돌려주는 로봇)에 엮어 넣으면 매번 푸시할 때마다 돌게 할 수 있다.

오프라인으로 보고 싶으세요?

책 전체를 PDF나 EPUB으로 무료로 내려받으세요.