본문 바로가기
문서실제 리포트는 이렇게 생겼습니다

실제 리포트는
이렇게 생겼습니다

아래는 우리가 일부러 취약하게 만든 데모 쇼핑몰을 주소 하나만 넣고 점검한 결과입니다.
발견도 점수도 순서도 제품이 내보낸 그대로이고, 도메인과 키만 전부 가짜입니다.

보안 점수

0 / 100

F등급 — 감점 합계는 208점이고, 점수 하한이 0점입니다.

밖에서 지금 확인된 노출

9

그중 2건은 데이터베이스가 실제로 읽혔습니다.

전체 발견

14

주소 하나만 넣고 돌린 결과입니다.

🚨 밖에서 지금 실제로 확인된 노출 (9건)

아래는 코드 추측이 아니라, 배포된 사이트를 실제로 점검해 지금 이 순간 외부에서 접근·열람이 가능함을 확인한 항목입니다. 그중 2건은 데이터베이스가 실제로 읽혔습니다. 가장 먼저 막아야 합니다.
  1. 🔴 [실증] Firebase Realtime DB 공개 — 누구나 데이터 읽기 가능

    https://vibeshop-demo.firebaseio.com/.json

    확인 내용: vibeshop-demo.firebaseio.com/.json 응답 확인(users·orders·payments 키 노출)

    심각도: critical — 데이터가 실제로 외부에서 읽힘

  2. 🔴 [실증] Supabase 테이블 공개 — anon 키로 데이터 읽힘(RLS 미설정)

    https://demoabcdefghijklmnop.supabase.co

    확인 내용: profiles 테이블에서 고객 이메일·카드 뒷자리가 anon으로 읽힘

    심각도: critical — 데이터가 실제로 외부에서 읽힘

  3. 🟠 환경변수 파일(.env) 공개 노출

    /.env

    확인 내용: /.env → HTTP 200, 실제 파일 내용 확인됨

    심각도: critical

  4. 🟠 AWS Access Key ID 노출

    /static/app.js

    확인 내용: AWS Access Key ID: AKIADEMO00… (마스킹)

    심각도: critical

  5. 🟠 Stripe 라이브 시크릿 키 노출

    /static/app.js

    확인 내용: Stripe 라이브 시크릿 키: sk_live_DE… (마스킹)

    심각도: critical

  6. 🟠 OpenAI API 키 노출

    /static/app.js

    확인 내용: OpenAI API 키: sk-demoDEM… (마스킹)

    심각도: critical

  7. 🟠 SendGrid API 키 노출

    /static/app.js

    확인 내용: SendGrid API 키: SG.DEMOfak… (마스킹)

    심각도: critical

  8. 🟠 Firebase 설정(apiKey 등) 노출

    /static/app.js

    확인 내용: Firebase 설정(apiKey 등): Firebase 설… (마스킹)

    심각도: high

펼쳐서 보여주는 건 상위 8건입니다. 9번째(CORS 설정 오류)는 아래 전체 목록에 들어 있습니다.
위치가 /static/app.js처럼 경로로만 적힌 건 이 데모를 로컬에 띄워 점검했기 때문이고, 실제 점검에서는 그 사이트 주소가 그대로 들어갑니다.

보안 점수: 0점 / 100점 (F등급)

심각도건수감점
critical7건-175점
high2건-20점
medium4건-12점
low1건-1점

1건당 감점은 critical 25점 · high 10점 · medium 3점 · low 1점입니다. 이 예시는 감점 합계가 208점이라 100점에서 시작해도 하한인 0점이 됩니다.
등급 경계는 90점 이상 A · 70점 이상 B · 50점 이상 C · 30점 이상 D · 그 미만 F 이므로 F등급입니다.

🎯 오늘 딱 하나만 한다면

브라우저에 노출된 모든 키를 즉시 교체하고, Firebase/Supabase 보안 규칙(RLS)을 잠그세요.

요약 (비개발자용)

0점 / 100점 — 이 앱은 지금 7개의 치명적 노출이 외부에서 확인됩니다.
전형적인 AI 바이브코딩 앱입니다. 비밀 키가 브라우저에 그대로 박혀 있고, 데이터베이스가 인증 없이 열려 있어요. 링크 하나만으로 여기까지 확인됩니다.

이 데모는 비용 없이 돌리려고 요약 두 문단을 고정해 두었습니다. 실제 검사에서는 이 자리를 AI가 그 앱의 발견 내용에 맞춰 새로 씁니다. 위의 발견·점수·순서는 제품 코드가 그대로 만든 것입니다.

기술 상세 — 전체 발견 목록

심각도항목위치
critical환경변수 파일(.env) 공개 노출/.env
criticalAWS Access Key ID 노출/static/app.js
criticalStripe 라이브 시크릿 키 노출/static/app.js
criticalOpenAI API 키 노출/static/app.js
criticalSendGrid API 키 노출/static/app.js
criticalFirebase Realtime DB 공개 — 누구나 데이터 읽기 가능vibeshop-demo.firebaseio.com/.json
criticalSupabase 테이블 공개 — anon 키로 데이터 읽힘(RLS 미설정)demoabcdefghijklmnop.supabase.co
highFirebase 설정(apiKey 등) 노출/static/app.js
highCORS 설정 오류(자격증명 + 모든 출처 허용)/
medium.firebaserc(Firebase 프로젝트) 노출/.firebaserc
mediumSupabase 프로젝트(URL·anon 키) 노출/static/app.js
medium소스맵(.map) 공개 노출/static/app.js.map
medium보안 헤더 누락/
low서버 스택 정보 노출(X-Powered-By)/

🔴 [실증]이 붙는 기준

“찾았다”와 “확인했다”는 다릅니다. 위 목록의 🔴 [실증]은 능동 점검으로 데이터가 실제로 읽힌 항목이고, 🟠 는 외부 응답으로 노출을 확인한 항목입니다.
리포트는 발견마다 아래 세 라벨 중 하나를 붙이고, 이 순서대로 정렬합니다.

라벨
🔴 실증우리가 실제로 확인함
🟡 가능성 높음코드 분석상 위험
⚪ 점검 필요확인 권장(오탐 가능)
키 값은 잘라서 보여줍니다. 밖에서 확인한 키는 앞 10자만 남기고 sk_live_DE… 처럼 자릅니다. 저장소 코드에서 나온 키는 값 자체를 ••• 로 치환합니다. 어느 쪽이든 키 전체 값은 리포트에도, 우리 저장 기록에도 남지 않습니다.

위 내용은 예시용으로 만든 취약한 데모 쇼핑몰의 점검 결과입니다. 도메인(vibeshop-demo)도 키(AKIADEMO00…)도 전부 가짜이며, 실제 고객 데이터가 아닙니다.

문서 목록으로