보안 점수
F등급 — 감점 합계는 208점이고, 점수 하한이 0점입니다.
밖에서 지금 확인된 노출
그중 2건은 데이터베이스가 실제로 읽혔습니다.
전체 발견
주소 하나만 넣고 돌린 결과입니다.
🚨 밖에서 지금 실제로 확인된 노출 (9건)
🔴 [실증] Firebase Realtime DB 공개 — 누구나 데이터 읽기 가능
https://vibeshop-demo.firebaseio.com/.json확인 내용: vibeshop-demo.firebaseio.com/.json 응답 확인(users·orders·payments 키 노출)
심각도: critical — 데이터가 실제로 외부에서 읽힘
🔴 [실증] Supabase 테이블 공개 — anon 키로 데이터 읽힘(RLS 미설정)
https://demoabcdefghijklmnop.supabase.co확인 내용: profiles 테이블에서 고객 이메일·카드 뒷자리가 anon으로 읽힘
심각도: critical — 데이터가 실제로 외부에서 읽힘
🟠 환경변수 파일(.env) 공개 노출
/.env확인 내용: /.env → HTTP 200, 실제 파일 내용 확인됨
심각도: critical
🟠 AWS Access Key ID 노출
/static/app.js확인 내용: AWS Access Key ID: AKIADEMO00… (마스킹)
심각도: critical
🟠 Stripe 라이브 시크릿 키 노출
/static/app.js확인 내용: Stripe 라이브 시크릿 키: sk_live_DE… (마스킹)
심각도: critical
🟠 OpenAI API 키 노출
/static/app.js확인 내용: OpenAI API 키: sk-demoDEM… (마스킹)
심각도: critical
🟠 SendGrid API 키 노출
/static/app.js확인 내용: SendGrid API 키: SG.DEMOfak… (마스킹)
심각도: critical
🟠 Firebase 설정(apiKey 등) 노출
/static/app.js확인 내용: Firebase 설정(apiKey 등): Firebase 설… (마스킹)
심각도: high
펼쳐서 보여주는 건 상위 8건입니다. 9번째(CORS 설정 오류)는 아래 전체 목록에 들어 있습니다.
위치가 /static/app.js처럼 경로로만 적힌 건 이 데모를 로컬에 띄워 점검했기 때문이고, 실제 점검에서는 그 사이트 주소가 그대로 들어갑니다.
보안 점수: 0점 / 100점 (F등급)
| 심각도 | 건수 | 감점 |
|---|---|---|
| critical | 7건 | -175점 |
| high | 2건 | -20점 |
| medium | 4건 | -12점 |
| low | 1건 | -1점 |
1건당 감점은 critical 25점 · high 10점 · medium 3점 · low 1점입니다. 이 예시는 감점 합계가 208점이라 100점에서 시작해도 하한인 0점이 됩니다.
등급 경계는 90점 이상 A · 70점 이상 B · 50점 이상 C · 30점 이상 D · 그 미만 F 이므로 F등급입니다.
🎯 오늘 딱 하나만 한다면
요약 (비개발자용)
0점 / 100점 — 이 앱은 지금 7개의 치명적 노출이 외부에서 확인됩니다.
전형적인 AI 바이브코딩 앱입니다. 비밀 키가 브라우저에 그대로 박혀 있고, 데이터베이스가 인증 없이 열려 있어요. 링크 하나만으로 여기까지 확인됩니다.
이 데모는 비용 없이 돌리려고 요약 두 문단을 고정해 두었습니다. 실제 검사에서는 이 자리를 AI가 그 앱의 발견 내용에 맞춰 새로 씁니다. 위의 발견·점수·순서는 제품 코드가 그대로 만든 것입니다.
기술 상세 — 전체 발견 목록
| 심각도 | 항목 | 위치 |
|---|---|---|
| critical | 환경변수 파일(.env) 공개 노출 | /.env |
| critical | AWS Access Key ID 노출 | /static/app.js |
| critical | Stripe 라이브 시크릿 키 노출 | /static/app.js |
| critical | OpenAI API 키 노출 | /static/app.js |
| critical | SendGrid API 키 노출 | /static/app.js |
| critical | Firebase Realtime DB 공개 — 누구나 데이터 읽기 가능 | vibeshop-demo.firebaseio.com/.json |
| critical | Supabase 테이블 공개 — anon 키로 데이터 읽힘(RLS 미설정) | demoabcdefghijklmnop.supabase.co |
| high | Firebase 설정(apiKey 등) 노출 | /static/app.js |
| high | CORS 설정 오류(자격증명 + 모든 출처 허용) | / |
| medium | .firebaserc(Firebase 프로젝트) 노출 | /.firebaserc |
| medium | Supabase 프로젝트(URL·anon 키) 노출 | /static/app.js |
| medium | 소스맵(.map) 공개 노출 | /static/app.js.map |
| medium | 보안 헤더 누락 | / |
| low | 서버 스택 정보 노출(X-Powered-By) | / |
🔴 [실증]이 붙는 기준
“찾았다”와 “확인했다”는 다릅니다. 위 목록의 🔴 [실증]은 능동 점검으로 데이터가 실제로 읽힌 항목이고, 🟠 는 외부 응답으로 노출을 확인한 항목입니다.
리포트는 발견마다 아래 세 라벨 중 하나를 붙이고, 이 순서대로 정렬합니다.
| 라벨 | 뜻 |
|---|---|
| 🔴 실증 | 우리가 실제로 확인함 |
| 🟡 가능성 높음 | 코드 분석상 위험 |
| ⚪ 점검 필요 | 확인 권장(오탐 가능) |
위 내용은 예시용으로 만든 취약한 데모 쇼핑몰의 점검 결과입니다. 도메인(vibeshop-demo)도 키(AKIADEMO00…)도 전부 가짜이며, 실제 고객 데이터가 아닙니다.