보안/공격/Lesson 02
웹 공격 — OWASP Top 10 + XSS · CSRF · SQL Injection
45분·theory
웹 공격 — OWASP Top 10 + XSS · CSRF · SQL Injection
🎯 이 lesson 을 읽고 나면
이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.
- ▸✅ OWASP Top 10 중 Top 5 외우기
- ▸✅ SQL Injection · XSS · CSRF 방어 코드 패턴
- ▸✅ PreparedStatement / DOMPurify / SameSite 활용
학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.
OWASP Top 10 (2021) — 가장 위험한 웹 취약점
한 줄: OWASP = 비영리 보안 단체. Top 10 은 가장 흔한 웹 취약점 카테고리. 면접 단골.
> 💡 A01·A03·A07 이 가장 자주 발생. 입사 후 첫 코드 리뷰에서 100% 마주침.
XSS · CSRF · SQL Injection — 3 대 흔한 공격
XSS (Cross-Site Scripting) — 악성 스크립트 삽입
XSS 방어 4가지:
1. 출력 escape — < → < (React·Vue 기본 처리)
2. CSP (Content-Security-Policy) — 신뢰 스크립트만 허용
3. httpOnly 쿠키 — JS 에서 세션 토큰 접근 X
4. innerHTML 대신 textContent
CSRF (Cross-Site Request Forgery) — 다른 사이트가 내 인증 정보로 요청
- ▸예:
evil.com페이지에<img src="bank.com/transfer?to=hacker&amt=999">삽입 - ▸브라우저가 자동으로 bank.com 쿠키 첨부 → 송금됨
CSRF 방어:
- ▸CSRF 토큰 — 폼에 랜덤 토큰. 서버가 검증. Spring Security 기본 제공
- ▸SameSite 쿠키 —
SameSite=Lax/Strict— 외부 도메인에서 쿠키 X - ▸Origin/Referer 검증 — 요청 출처 확인
SQL Injection — 사용자 입력이 SQL 의 일부가 됨
- ▸❌ 취약:
"SELECT * FROM users WHERE id='" + input + "'" - ▸입력:
1' OR '1'='1→ 모든 행 반환 - ▸입력:
1'; DROP TABLE users; --→ 테이블 삭제
방어:
- ▸Parameterized Query (Prepared Statement):
- ▸ORM 사용 (SQLAlchemy·Hibernate·Prisma) — 자동 escape
- ▸입력 화이트리스트 — 숫자·UUID 등 명확한 형식만
> ⚠️ "' 만 escape하면 안전" 은 틀린 통념. 항상 parameterized query.
🤖 AI 에게 이렇게 요청해보세요
이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.
- ▸"이 코드의 SQL Injection / XSS / CSRF 취약점 점검해줘"
- ▸"이 입력값 검증을 화이트리스트 방식으로 강화해줘"
왜 이게 토큰을 줄이나
개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.
먼저 읽으면 좋은 개념: 보안
다음 추천: 암호화 + 인증 — 해시·HTTPS·세션·JWT