10주 개발 클래스
← 전체 위키
2주차 · 실습 진행표

W2 실습 — 내 앱에 보안 붙이고, 10개로 확인하기

오늘은 강의가 아니라 손으로 하는 시간입니다. 아래 순서대로만 따라오세요. 끝까지 못 가도 괜찮습니다 — 어디까지 왔든 그 자리에서 시작하면 됩니다.

오늘 시간표 — 12:10 ~ 13:00

따라오시라고 적어둔 페이스입니다. 진도를 맞출 필요는 없습니다 — 각자 출발점이 다르니, 자기 칸에서 한 걸음 나아가면 그게 오늘의 성공입니다.
12:10–12:15
복습 — 지난주 보안 지도 7단계 입력 → 전송로 → 유입 → 신분 → 권한 → 저장 → 유출 · 오늘 할 일 안내
12:15–12:25
① 자가진단 + 세팅 — 내가 어디부터인지 정하기 설치·계정에서 막히신 분은 이 시간에 옆에서 같이 봅니다
12:25–12:45
②③ 설계 → 구현 — 프롬프트 붙여넣고 내 앱에 보안 붙이기 PRD·MVP가 아직이면 이 시간에 그것부터 — 보안은 다음에 붙여도 됩니다
12:45–12:57
④ 검증 10개 — 직접 공격해보고 통과 개수 세기 시간이 모자라면 앞의 5개(01·10·04·02·03)만 — 나머지는 집에서
12:57–13:00
마무리 — 안 된 것 고치는 법 · 다음 주(8/13) 예고 남는 시간·집에서는 서버 방어단 6판

1나는 어디부터 시작하나 — 빠진 칸부터 하면 됩니다

1~3주차에 못 오셨어도 괜찮습니다. 위에서부터 확인해서 처음으로 '아니오'가 나오는 칸이 오늘의 출발점입니다.
📌 자가진단 — 4칸
  • 편집기(VSCode 등)가 깔려 있다 — 아니면 W1 ③ 설치부터 (10분)
  • 터미널에 claude 치면 실행된다 — 아니면 W1 ③ Claude Code 설치 · 막히면 ④ 트러블슈팅
  • 내 아이디어로 PRD 1장을 썼다 — 없으면 /samples PRD 복사 → Claude에 붙여넣기 (10분)
  • 그 PRD로 만든 앱(MVP)이 돌아간다 — 없으면 오늘은 여기까지가 목표. 보안은 다음에 붙여도 됩니다
🙋 4칸이 다 되신 분은 바로 ②로. 한 칸이라도 비면 그 칸을 채우는 게 오늘 실습입니다 — 진도를 따라잡는 게 아니라 각자 한 칸 앞으로 가는 시간입니다.

2Claude Code를 — '내 앱 폴더'에서 열기

여기서 제일 많이 막힙니다. Claude는 지금 열려 있는 폴더만 봅니다. 엉뚱한 폴더에서 시작하면 내 앱이 아니라 새 앱을 만들어 버립니다.
  1. 편집기에서 내 앱 폴더를 연다 (File → Open Folder)
  2. 편집기 안 터미널에서 claude 실행
  3. 확인 — "지금 이 폴더에 뭐가 있는지 알려줘" 라고 물어서 내 앱 파일 이름들이 나오면 맞게 열린 것
⚠️ 파일 목록이 낯설면 다른 폴더입니다 — 끄고 폴더부터 다시 여세요. (이 상태로 진행하면 보안이 엉뚱한 앱에 붙습니다.)

3붙여넣을 프롬프트 3개 — 순서대로

두 갈래가 있습니다. 제대로 가는 길은 ①②③ 순서대로 — 내 앱에 맞는 설계를 대화로 직접 정합니다. 시간이 부족하거나 오늘 처음이면 ①②를 건너뛰고, /samples의 🔒 보안 Design Doc(영어 완성본)을 통째로 복사해 ③과 함께 붙여넣으세요. 영어 그대로 주는 게 결과가 좋습니다 — 우리가 읽을 건 아니니까요.
📄 /samples — 보안 Design Doc · ADR 복사하러 가기
① 설계부터 — 대화하며 정하기 — 혼자 다 쓰게 두지 말고 7단계를 한 칸씩 되묻게 만드는 게 핵심
지금 열려 있는 이 폴더가 내 앱이야. 여기에 로그인·보안을 붙일 건데, 사람이 하나씩 찔러보는 공격만이 아니라 AI 에이전트가 자동으로 훑는 대규모 공격까지 버텨야 해. 이 앱에 데이터베이스가 없으면 SQLite로 먼저 만들고 시작해줘. 오늘 배운 개념 — 비번 해시(bcrypt) · 인증과 인가는 다름(매 요청 소유자 확인) · 입력을 명령으로 착각(SQL·프롬프트 인젝션) · XSS/CSRF와 토큰을 어디 저장하느냐 · 최소 권한 · 자격증명 위생 · rate limit — 을 기준으로 선택지를 비교분석한 다음, 그 결론으로 Design Doc을 작성해줘. 다만 혼자 다 쓰지 말고, 입력 → 전송로 → 유입 → 신분 → 권한 → 저장 → 유출 7단계를 한 칸씩 나한테 물어보면서 정해줘. 결정한 항목은 각각 ADR로 따로 남겨줘.
② Grill me — 공격자 입장에서 캐묻기 — 설계에 구멍이 있으면 여기서 나옵니다
이 보안 설계를 공격자 입장에서 캐물어봐 — 토큰이 털리면 어디까지 뚫리나, 로그아웃이 즉시 되나, 로그나 에러 메시지로 비밀이 새나, 필요 이상 권한으로 도는 프로세스는 없나. 빈틈마다 어떻게 고칠지도 같이.
③ 구현 + 검증까지 — 만들고 끝이 아니라, 아래 10개를 내가 직접 해볼 수 있게 받아냅니다
이 design doc대로 내 앱에 구현하고, §7 검증 10개를 하나씩 내가 직접 해볼 수 있게 알려줘 — 뭘 누르거나 치면 되는지, 통과면 화면에 뭐가 보이는지. 코드를 읽어서 판단하지 말고 실제로 돌려서 확인할 수 있는 방법으로.
💡 모르는 말이 나오면 그냥 "중학생 수준으로 설명해줘" 라고 치세요. 그게 정상입니다.

4검증 10개 — 내가 직접 공격해보고 눈으로 확인

'코드가 맞게 생겼다'는 검증이 아닙니다. 직접 해보고 화면에 뭐가 나오는지가 검증입니다. 10개는 실제 사고에 그대로 붙어 있습니다 — 남들이 뚫렸던 걸 이번엔 내 앱에서 확인하는 겁니다. (서버 방어단을 해보셨다면 그 6판이 이 중 6개입니다.) (앞의 번호는 보안 Design Doc §7의 항목 번호 — 순서가 아니라 이름입니다. Claude에게 "§7의 3번"처럼 그대로 말하면 됩니다.)
통과 0 / 10
체크는 이 브라우저에만 저장됩니다 · 하나도 못 통과해도 정상입니다 — 그게 오늘 고칠 목록입니다
1. 로그인이 진짜 잠겨 있나
🖱 Claude Code에 → 회원 표를 저장된 그대로 보여줘
✅ 통과 — $2b$10$… 처럼 알아볼 수 없는 글자❌ 실패 — 1234 처럼 비번이 그대로 보임
🎮 2판 해시🗞 SKT 유심
🖱 아무 비번으로 5번 실패 → 6번째는 맞는 비번으로 로그인
✅ 통과 — 맞는 비번인데도 잠시 막힘 (429)❌ 실패 — 6번째에 그냥 로그인됨
🎮 1판 계정 잠금🗞 닌텐도
🖱 비밀번호 칸에 ' OR '1'='1 을 넣고 로그인
✅ 통과 — 그냥 로그인 실패❌ 실패 — 로그인 성공 — DB가 글자를 명령으로 읽음
🎮 3판 입력 검증🗞 여기어때
2. 남의 것이 보이나
🖱 내 글 주소 끝 번호를 다른 번호로 바꿔서 접속 (예 /items/3/items/4)
✅ 통과 — 권한 없음 (403)❌ 실패 — 남의 글 내용이 그대로 보임
🎮 4판 소유자 확인🗞 모두의창업
🖱 시크릿 창(새 창)으로 같은 주소를 그대로 열기
✅ 통과 — 로그인부터 하라고 막힘 (401)❌ 실패 — 로그인 없이 그냥 보임
🎮 5판 인증 게이트🗞 펠로톤
🖱 Claude Code에 → 로그아웃 전에 쓰던 토큰으로 다시 요청해봐
✅ 통과 — 다시 못 들어감 (401)❌ 실패 — 로그아웃했는데 계속 들어가짐
🗞 쿠팡 퇴사자 키
3. 훔치거나, 나 대신 시킬 수 있나
🖱 글쓰기 칸에 <script>alert(1)</script> 를 넣고 저장
✅ 통과 — 그 글자가 글자 그대로 보임❌ 실패 — 경고창(팝업)이 뜸 — 남의 코드가 내 화면에서 실행됨
🗞 XSS
🖱 F12 → Console 에 document.cookie 입력, localStorage 도 확인
✅ 통과 — 토큰이 안 보임❌ 실패 — 긴 토큰 문자열이 그대로 보임 — 훔쳐갈 수 있음
🗞 XSS → 탈취
4. 난타와 흔적
🖱 같은 화면을 빠르게 30번 새로고침 (또는 Claude가 알려준 한 줄 실행)
✅ 통과 — 요청이 너무 많다며 막힘 (429)❌ 실패 — 몇 번을 눌러도 계속 받아줌
🎮 6판 rate limit🗞 넷리파이 요금 폭탄
🖱 Claude Code에 → 로그에 비밀번호나 토큰이 찍히는 곳이 있는지 전부 찾아줘
✅ 통과 — 한 군데도 없음❌ 실패 — 비번이나 Bearer 토큰이 로그에 남아 있음
🗞 SKT 평문 저장

5안 되는 게 있으면 — 그게 정상, 고치면 됩니다

한 번에 다 통과할 필요 없습니다. 돌려보고 → 나온 것만 고치고 → 다시 돌려보고. 이 반복이 실제 개발 현장에서 하는 그대로이고, 이 정도면 사내 취약점 점검도 대개 통과합니다.
❌ 하나가 실패했을 때 — 실패한 항목을 넣어서 그대로
방금 확인해봤더니 이 검증이 실패했어 — [ 여기에 안 된 항목 번호·내용 ].
왜 뚫린 건지 먼저 쉽게 설명해주고, 고친 다음, 같은 방법으로 내가 다시 확인하는 법을 알려줘.
🔁 전체 점검 한 번 더 — 고친 뒤 처음부터 다시 훑기
내 앱 전체를 훑어서 오늘 배운 기준으로 취약한 곳을 찾아줘 — 비번 해시 · 요청마다 소유자 확인 · SQL 인젝션 · 토큰을 어디 저장하는지 · rate limit · 로그에 비밀이 찍히는지.
찾은 것만 고치고, 고친 뒤에 한 번 더 훑어서 남은 게 없는지 확인해줘.
🕹 시간이 남으면 서버 방어단으로 6가지 공격을 직접 막아보세요 — 위 검증 10개 중 6개가 그 게임 6판입니다. ▸ 게임 열기
다시 보기 →보안 강의 슬라이드
← 10주 전체 보기  ·  전체 위키