1인 SaaS의 보안 사고는 매출보다 빠르게 옵니다. 해커는 큰 회사만 노리지 않습니다 — 자동화된 봇이 작은 사이트도 매일 스캔. 이 10가지만 해결해도 99%의 공격을 막습니다.
OWASP Top 10에서 1인 창업가에게 가장 치명적인 것 순으로
| # | 위협 | 심각도 | 1인 SaaS 빈도 | 해결 시간 |
|---|---|---|---|---|
| 1 | Secrets 노출 (.env, API 키) | 치명적 | 매우 높음 | 15분 |
| 2 | Broken Access Control (RLS 누락) | 치명적 | 높음 | 30분 |
| 3 | SQL Injection | 치명적 | 중간 | 이미 차단 (Supabase) |
| 4 | XSS (Cross-Site Scripting) | 높음 | 중간 | 이미 차단 (React) |
| 5 | JWT 보안 (만료·refresh) | 높음 | 중간 | 30분 |
| 6 | 비밀번호 평문 저장 | 치명적 | 낮음 (Supabase 자동) | 이미 차단 |
| 7 | Rate Limiting 미구현 | 높음 | 높음 | 1시간 |
| 8 | CORS 미설정 (와일드카드) | 중간 | 중간 | 15분 |
| 9 | HTTPS 미강제 | 높음 | 낮음 (Vercel 자동) | 이미 차단 |
| 10 | Logging·Monitoring 부재 | 중간 | 매우 높음 | 30분 |
gitleaks detect 명령 실행git rm --cached .env ③ BFG Repo-Cleaner로 history 정리 ④ force push.env* 등록 + pre-commit hook으로 gitleaks 자동 실행ALTER TABLE x ENABLE ROW LEVEL SECURITY; + CREATE POLICY "own data" ON x USING (auth.uid() = user_id);"sliding-window: 10 req/min/IP"grep -r "dangerouslySetInnerHTML"{ user.bio }로 충분. HTML이 꼭 필요하면 DOMPurify 통과 후Access-Control-Allow-Origin: * → 다른 사이트가 우리 API 호출 가능https://my-app.vercel.app만 허용)AI 비용 폭발 공격 방어 — 1순위 보안 작업
.env, .env.local, .env.*.localvercel env pull)NEXT_PUBLIC_ 미접두사 확인dangerouslySetInnerHTML 사용 위치 검토 + DOMPurify@supabase/ssr 패턴)