AI한테 "이런 서비스 만들어줘" 했더니 진짜로 만들어줬을 거예요. 링크도 생겼고, 실제로 작동도 됩니다.
이 뿌듯함은 직접 경험해본 사람만 알죠. 그런데 그 링크, 지금 어떤 상태인지 확인한 적 있으신가요?
바이브코딩으로 만든 서비스가 5분 만에 뚫리는 건 해킹 기술이 필요해서가 아니에요. 문이 그냥 열려 있기 때문입니다. 그리고 이건 특정 누군가의 문제가 아니라, 바이브코딩으로 서비스를 배포한 대부분이 갖고 있는 구멍이에요.
이러한 문제마다 AI한테 그대로 붙여넣을 수 있는 프롬프트를 담았습니다. 읽고 나서 바로 쓸 수 있는 것들만 골랐어요.
AI는 시킨 것만 합니다
본격적으로 들어가기 전에 이것부터 짚고 갈게요.
바이브코딩으로 서비스를 만들 때 보통 이렇게 시키죠. "로그인 기능 만들어줘", "결제 붙여줘", "대시보드 만들어줘." AI는 이것까진 잘 해줍니다.
그런데, 혹시 "보안 설정도 다 해줘"라고 시킨 적 있으신가요? 아마 없으실 겁니다. 그러면 AI는 최소한의 보안만 설정해 주고, 제대로 작업을 해주진 않습니다. 각잡고 시킨 적이 없으니까요.
바이브코딩으로 서비스를 배포한 화면 예시
바이브코딩 서비스의 보안 구멍은 코드를 못 짜서가 아니라, 설정을 안 시켜서 생겨요.
반대로 말하면, 어떤 설정을 시켜야 하는지만 알면 된다는 뜻입니다. 보안도 AI한테 쉽게 시킬 수 있거든요.
Tip 1. 문이 열려 있다 — 접근 권한
혹시, 바이브코딩으로 사이트를 만든 적이 있으신가요? 그럼 내 서비스 주소 뒤에 /admin을 쳐보세요.
주소창에 슬래시 어드민 입력 시 관리자 페이지 노출 예시
만약 여기서 로그인 화면을 거치지 않고 관리자 페이지가 그냥 뜬다면, '문이 열려 있는' 겁니다. /main, /dashboard도 마찬가지예요. 로그인 없이 접근이 된다면 전부 같은 문제입니다.
왜 이런 일이 생기냐면, AI가 로그인 페이지를 만들 때 "로그인 안 한 사람은 다른 페이지에 못 들어오게 해줘"라는 말을 들은 적이 없기 때문이에요. 로그인 페이지는 만들었는데, 뒷문을 잠그지 않은 거죠.
비유하면 이렇습니다. 가게 정문에 자물쇠는 걸려 있는데, 뒷문이 열려 있는 거예요. 손님한테는 정문으로 오라고 했지만, 뒤로 돌아가면 그냥 들어올 수 있는 상태입니다.
지금 확인하는 방법
내 서비스 주소 뒤에 아래를 하나씩 붙여서 접속해보세요.
•
/admin
•
/main
•
/dashboard
•
/users
로그인 없이 페이지가 보인다면 아래 프롬프트를 바로 쓰면 됩니다.
AI한테 이렇게 시켜보시면 됩니다
이 서비스의 모든 페이지는 로그인한 사용자만 접근할 수 있어야 해. 로그인하지 않은 상태에서 URL을 직접 입력하면 로그인 페이지로 자동으로 돌아오게 해줘. 관리자 페이지는 일반 사용자도 접근하지 못하도록 따로 권한을 분리해줘.
Tip 2. 열쇠가 밖에 나와 있다 — API 키 노출
ChatGPT나 Claude 같은 AI 기능을 서비스에 붙이려면 API 키라는 게 필요해요. 일종의 인증 열쇠인데, 이게 있어야 AI 기능을 쓸 수 있거든요. 바이브코딩으로 이 기능을 붙일 때 보통 어떻게 하냐면, AI가 "여기에 API 키 넣으세요"라고 알려주는 자리에 그냥 복붙합니다. 작동도 잘 돼요. 그런데 이 상태로 배포하면 절대 안됩니다.
브라우저 개발자 도구에서 API 키가 노출되는 화면
배포된 서비스에서 브라우저 개발자 도구를 열면, 코드 안에 넣어둔 API 키가 그대로 보이기 때문이예요. 말 그대로, 누구나 볼 수 있어요.
문제는 이 키를 가져다 쓰면 요금은 내 계정에서 나간다는 점입니다. 실제로 배포 직후 몇 분 만에 키가 긁혀서 수십만 원이 청구된 사례도 종종 보입니다.
비유하면 이렇습니다. 금고 비밀번호를 메모지에 적어서 금고 옆에 붙여놓은 거예요. 금고는 잠겨 있는데, 비밀번호가 옆에 있으니 의미가 없는 거죠.