API키가 노출되면 생기는 일
키는 곧 '남의 계정으로 서비스를 쓰는 열쇠'입니다. 노출되면 세 가지가 벌어집니다.
- 요금 폭탄 — 남이 내 키로 유료 API를 호출해 청구가 폭증
- 데이터 유출·변조 — 권한이 넓은 키면 DB를 읽거나 지울 수 있음
- 서비스 악용 — 문자·메일 발송 키가 새면 스팸 발송에 이용
어디서 새는가
| 경로 | 설명 |
|---|---|
| 앱 디컴파일 | 배포된 앱 파일을 뜯으면 안에 박힌 문자열(키)이 그대로 보임 |
| 깃(GitHub) 커밋 | 설정 파일·키를 실수로 올려 공개 저장소에 남음 |
| 프론트 하드코딩 | 웹·앱 화면 코드에 키를 직접 적어 브라우저에서 노출 |
특히 "앱 안에 넣었으니 안전하다"는 오해가 큽니다. 앱은 사용자 기기에 설치되는 순간 분석 대상이 됩니다.
지금 당장 해야 할 5가지
- 노출된 키 폐기 — 해당 키를 즉시 비활성화
- 새 키 재발급 — 새 키로 교체하고 앱·서버에 반영
- 사용 제한 걸기 — 허용 앱·도메인·IP, 호출 가능한 API 범위 제한
- 사용량·청구 확인 — 비정상 급증이 있었는지 점검
- 깃 기록 정리 — 공개 저장소에 올렸다면 이력에서 제거(단순 삭제로는 부족)
키 종류별 대처
- Firebase — 클라이언트 키는 식별용이라 노출 자체보다 보안 규칙이 핵심. 규칙이 열려 있으면 위험
- 구글맵 — 앱 패키지·도메인 제한, 사용 API 제한을 반드시 설정
- 결제·문자·메일 — 절대 앱에 넣지 말고 서버에서만 사용
- 서버 관리자 키 — 앱·프론트에 두면 안 됨. 유출 시 최고 위험
다시 안 새게 하는 법
원칙은 하나입니다. 민감한 키는 앱이 아니라 서버에 둔다. 앱은 우리 서버에 요청하고, 실제 외부 API 호출은 서버가 대신하는 백엔드 프록시 구조로 바꾸면 키가 앱에 실리지 않습니다. 키는 코드가 아니라 환경변수·비밀 관리 도구로 관리하고, 깃에는 올리지 않습니다.
이미 악용됐는지 확인하기
콘솔의 사용량·청구 그래프에서 평소와 다른 급증, 낯선 지역에서의 호출, 예상치 못한 API 사용을 확인합니다. 이상이 보이면 키 폐기와 함께 결제 상한·예산 알림을 걸어 추가 피해를 막으세요.
자주 묻는 질문
앱에 키를 아예 안 넣을 수 있나요?
민감한 키는 넣지 않는 게 맞습니다. 앱은 우리 서버에 요청하고 서버가 외부 API를 대신 호출하게 하면(백엔드 프록시) 키가 앱에 실리지 않습니다.
Firebase API키는 노출돼도 괜찮다던데요?
Firebase 클라이언트 키는 프로젝트 식별용이라 그 자체로는 치명적이지 않습니다. 다만 보안 규칙이 열려 있으면 데이터가 그대로 노출되므로, 규칙 점검이 진짜 핵심입니다.
요금이 청구돼 버렸으면 어떻게 하나요?
우선 키를 폐기하고 결제 상한·예산 알림을 겁니다. 비정상 사용이 명확하면 제공사에 상황을 알리고 조정을 문의할 수 있습니다. 재발 방지 조치를 함께 남겨 두세요.
깃에 올린 키, 파일만 지우면 되나요?
아니요. 커밋 이력에 남아 있어 단순 삭제로는 부족합니다. 이력에서 제거하는 조치를 하고, 무엇보다 그 키는 이미 노출된 것으로 보고 재발급하는 게 안전합니다.
키 노출·보안, 무료로 점검해 드립니다
앱·서버 구성을 알려주시면 키가 새는 지점과 보안 규칙 위험을 먼저 진단해 드립니다.
무료 점검 문의하기 무료 점검 문의 → appmonster.co.kr
문의: appmonster.kr@gmail.com
함께 보기: Firebase 보안 규칙 점검 · 개인정보 안전하게 저장 · 보안 규칙 실수 TOP 5