Recent Posts
Recent Comments
반응형
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

오늘도 공부

🚨 SaaS 개발 시 반드시 프롬프트에 넣어야 할 보안 체크리스트 (실전 가이드) 본문

AI

🚨 SaaS 개발 시 반드시 프롬프트에 넣어야 할 보안 체크리스트 (실전 가이드)

행복한 수지아빠 2026. 3. 23. 09:34
반응형

 

1. CORS / Preflight

개념
브라우저에서 다른 도메인으로 요청할 때 허용 여부를 서버가 명시.

위협

  • 잘못된 Access-Control-Allow-Origin: * → 인증 쿠키 탈취 가능

구현 포인트

  • 허용 Origin을 화이트리스트로 제한
  • credentials: true 사용 시 * 금지
  • Preflight(OPTIONS) 응답 정확히 구성

테스트 기준

  • 허용되지 않은 Origin에서 요청 시 차단
  • 인증 포함 요청이 예상대로 실패/성공하는지 확인

2. CSRF (Cross-Site Request Forgery)

개념
사용자가 로그인된 상태에서 의도치 않은 요청을 보내게 만드는 공격

위협

  • 결제, 계정 변경 등 민감 요청 위조

구현 포인트

  • CSRF Token 적용 (Double Submit or SameSite=strict/lax)
  • 상태 변경 API는 반드시 보호

테스트 기준

  • 토큰 없이 POST/PUT 요청 시 403 발생

3. XSS + CSP

개념
스크립트 삽입 공격 + 이를 방어하는 Content Security Policy

위협

  • <script>alert()</script> → 세션 탈취

구현 포인트

  • 출력 시 escape (React도 dangerouslySetInnerHTML 금지)
  • CSP 헤더 설정 (script-src 'self')
  • 사용자 입력 sanitize

테스트 기준

  • 스크립트 삽입 시 실행되지 않아야 함
  • CSP violation 로그 확인

4. SSRF (Server-Side Request Forgery)

개념
서버가 내부 네트워크로 요청하게 만드는 공격

위협

  • http://169.254.169.254 → 클라우드 메타데이터 탈취

구현 포인트

  • URL 입력 검증 (화이트리스트 기반)
  • 내부 IP 접근 차단
  • DNS rebinding 방지

테스트 기준

  • 내부 IP 요청 시 실패

5. AuthN / AuthZ

개념

  • AuthN: 인증 (누구인지)
  • AuthZ: 권한 (무엇을 할 수 있는지)

위협

  • 인증 없이 API 접근
  • 권한 없는 데이터 접근

구현 포인트

  • JWT / Session 기반 인증
  • 모든 API에 권한 체크 필수

테스트 기준

  • 인증 없이 접근 → 401
  • 권한 없는 요청 → 403

6. RBAC / ABAC + 테넌트 격리

개념

  • RBAC: 역할 기반
  • ABAC: 속성 기반
  • 멀티 테넌트 데이터 분리

위협

  • A회사 사용자가 B회사 데이터 조회

구현 포인트

  • 모든 쿼리에 tenant_id 필터 강제
  • role + attribute 기반 정책 적용

테스트 기준

  • 다른 테넌트 데이터 접근 불가

7. 최소 권한 (Principle of Least Privilege)

개념
필요한 최소한의 권한만 부여

위협

  • DB admin 권한 남용

구현 포인트

  • 서비스별 IAM 분리
  • 읽기/쓰기 권한 분리

테스트 기준

  • 불필요 권한 제거 후 정상 동작 확인

8. Validation + SQL Injection 방어

개념
입력값 검증 + 쿼리 조작 방지

위협

' OR 1=1 --

구현 포인트

  • ORM / Prepared Statement 사용
  • 입력 스키마 검증 (zod, joi 등)

테스트 기준

  • Injection 시도 → 실패

9. Rate Limit / Brute Force 방어

개념
과도한 요청 차단

위협

  • 로그인 무차별 대입 공격

구현 포인트

  • IP + 계정 기반 rate limit
  • exponential backoff

테스트 기준

  • 일정 횟수 초과 시 429

10. 쿠키 + 세션 보안

개념
세션 탈취 방지

구현 포인트

  • HttpOnly, Secure, SameSite
  • 세션 재생성 (login 시)

테스트 기준

  • JS에서 쿠키 접근 불가
  • HTTPS에서만 전송

11. Secret 관리 + Rotation

개념
API 키, DB 비밀번호 보호

구현 포인트

  • .env → Secret Manager 이동
  • 주기적 키 교체

테스트 기준

  • 코드에 하드코딩된 키 없음

12. HTTPS / HSTS + 보안 헤더

개념
암호화 + 브라우저 강제 HTTPS

구현 포인트

  • HSTS 설정
  • 보안 헤더:
    • X-Frame-Options
    • X-Content-Type-Options
    • Referrer-Policy

테스트 기준

  • HTTP 접속 시 HTTPS 리다이렉트

13. Audit Log

개념
모든 중요 행동 기록

위협

  • 침해 사고 시 추적 불가

구현 포인트

  • 로그인, 권한 변경, 데이터 수정 로그 기록
  • immutable 저장

테스트 기준

  • 이벤트 발생 시 로그 생성 확인

14. 에러 노출 차단

개념
내부 정보 외부 노출 방지

위협

  • stack trace → 시스템 구조 노출

구현 포인트

  • production: generic error message
  • 내부 로그는 별도 저장

테스트 기준

  • 에러 발생 시 상세 정보 숨김

15. 의존성 취약점 점검

개념
라이브러리 보안 관리

구현 포인트

  • npm audit, snyk, dependabot
  • 주기적 업데이트

테스트 기준

  • known vulnerability 0 또는 허용 수준 이하

🧠 핵심: 프롬프트에 이렇게 강제해야 한다

실제 바이브코딩에서 중요한 건 “설명”이 아니라 출력 제약이다.

👉 반드시 포함해야 할 문장:

위 보안 항목(CORS, CSRF, XSS, SSRF, Auth, RBAC, Validation, RateLimit, Session, Secret, HTTPS, AuditLog 등)을 모두 구현하고,
각 항목별 테스트 코드 및 검증 결과까지 통과한 상태의 코드만 출력하라.
보안 미충족 시 코드를 출력하지 말 것.

🚀 결론

바이브코딩의 리스크는 단순하다:

“빠르게 만들수록 보안은 빠진다”

그래서 전략은 하나다:

👉 프롬프트에서 보안을 강제하고, 테스트 통과 결과만 받는다

이걸 안 하면:

  • MVP → 바로 해킹
  • SaaS → 데이터 유출
  • 투자 → 바로 실패

 

반응형