테이블 하나가
전체 고객 명부입니다
앱 화면에는 내 정보만 보입니다. 그런데 화면에서 안 보이는 것과, 서버가 안 주는 것은 완전히 다른 얘기예요. 브라우저로 나가는 공개 키(anon 키)는 원래 공개해도 되는 값입니다 — 행 수준 보안(RLS)이 켜져 있을 때만요. 안 켜진 테이블은 그 키 하나로 통째로 읽힙니다.
점검 대상
저장소 최신 코드 · SQL 마이그레이션
받게 되는 것
테이블별 판정 + 넣어야 할 SQL
포함 플랜
무료 플랜
무엇을 확인하나요
create table은 있는데 RLS를 켜는 구문이 따라오지 않은 테이블 — 개발자도구에서 주소와 공개 키만 복사해 가면 회원 명부가 통째로 나오는 상태입니다- RLS를 켜 놓고도 조건이
using (true)라 사실상 아무도 못 막는 정책 - 브라우저로 나가는 코드 안의 service_role 키 — RLS를 통째로 무시하는 키라 치명으로 올립니다
- 공개 키 클라이언트에서 바로 insert · update · delete 하는 자리
마이그레이션 점검 (예시)
| 테이블 | 판정 |
|---|---|
| profiles | RLS 켜는 구문 없음 · 높음 |
| orders | 정책 조건이 using (true) · 높음 |
| posts | RLS 켜짐 |
| audit_logs | RLS 켜짐 |
어떻게 동작하나요
01
읽기
저장소 최신 코드를 받아 .sql과 migrations 폴더에서 테이블·정책 구문을 읽습니다. 커밋 이력은 보지 않습니다.
02
대조
테이블마다 RLS를 켜는 구문이 있는지, 정책 조건이 진짜로 걸러 주는지 맞춰 봅니다.
03
설명
어떤 테이블이 왜 위험한지와 그대로 붙여 넣을 수 있는 SQL을 한국어 리포트에 적습니다.
자주 묻는 질문
- 공개 키가 노출된 게 문제 아닌가요?
- 공개 키(anon 키)는 원래 브라우저로 나갑니다. 문제는 그 키로 어디까지 읽히느냐이고, 그걸 정하는 게 RLS입니다. 다만 service_role 키는 다릅니다 — RLS를 전부 무시하므로 브라우저 코드에서 발견되면 치명으로 올립니다.
- 실제로 읽히는지도 확인하나요?
- 저장소 스캔은 코드만 읽습니다. 배포 주소의 소유를 확인해 두면 정기 점검이 공개 키로 실제 조회가 되는지까지 확인합니다 (베이직 주 1회 · 프로 매일). 무료 플랜에는 이 정기 점검이 없습니다.
- 정책을 고쳐서 올려주나요?
- 아니요. 코드를 대신 고쳐 올려 주는 요청(PR, pull request)은 코드 결함 · 시크릿 · 의존성 세 가지에만 만듭니다. RLS는 넣어야 할 SQL을 리포트에 적어 드리고, 반영은 직접 하십니다.
이 문제 자세히
내 저장소에서도
같은 문제가 있는지 보세요
무료 플랜은 카드 등록 없이 시작합니다.