정리와 연습
핵심 요점
- AI가 생성한 코드는 기본적으로 안전하지 않다. 깨끗해 보이는 첫인상을 믿지 말고, 취약점이 있다고 가정하고 찾아 나서라.
- 큰 범주는 반복된다: 인젝션, 노출된 비밀값, 누락된 인가, 안전하지 않은 파일 업로드, 그리고 지어낸 의존성.
- 인가는 로그인 단위가 아니라 요청 단위다 — 모든 엔드포인트는 단지 로그인했는지가 아니라 이 사용자가 이 동작을 해도 되는지 확인해야 한다.
- 푸시할 때마다
gitleaks같은 비밀값 스캐너를 돌리고, 한 번이라도 유출된 키는 교체하라. 건너뛸 수 없도록 스캔을 에 엮어라. - 90일째가 첫날보다 위험하다 — 보안 게이트를 건너뛰지 않을 만큼 싸게, 건너뛸 수 없을 만큼 자동으로 만들어라.
직접 해보기
인증, 사용자 데이터, 업로드를 다루는 자신의 기능 하나를 골라 아래의 적대적 리뷰 프롬프트를 돌려라. AI가 보고하는 취약점마다 그것을 악용하는 정확한 요청과 최소 수정을 요청하고, 수정을 적용한 뒤 프롬프트를 다시 돌려라. 마지막으로 저장소와 히스토리 전체에 gitleaks(또는 플랫폼의 비밀값 스캔)를 실행하며 마무리하라.
이 장의 프롬프트
Here is the code for a feature that handles [auth / user data / uploads]:
[paste the code].
Act as an attacker reviewing this for security holes. Specifically check:
- broken authorization (can a user act on another user's data?)
- injection via input (SQL injection, XSS, command injection)
- exposed secrets or keys in code or responses
- unsafe file handling (type, size, path, generated names)
- missing validation or rate limits
For EACH issue, show the exact request that exploits it, then the fix.
Do NOT reassure me — assume there IS a vulnerability and find it.