구분 질문
- DB? 쿼리 구조가 바뀌면 SQL Injection이다.
- 실행? 브라우저에서 스크립트가 실행되면 XSS이다.
- 요청? 로그인 상태로 요청을 속이면 CSRF이다.
실기 답안에서는 공격 이름보다 먼저 무엇을 조작하는지, 피해가 어디에서 발생하는지, 어떤 통제로 막는지를 분리해 쓰면 헷갈리지 않는다.
SQL Injection 입력값에 SQL 구문을 넣어 서버의 DB 쿼리 구조를 바꾼다.
XSS 게시글, 댓글, URL 값에 스크립트를 넣어 브라우저에서 실행시킨다.
CSRF 로그인된 사용자가 원하지 않는 요청을 보내도록 유도한다.
DB 인증 우회, 개인정보 조회, 데이터 수정·삭제로 이어진다.
사용자 브라우저 세션 탈취, 피싱, 화면 변조, 악성 사이트 이동이 가능하다.
사용자 세션 비밀번호 변경, 게시글 작성, 송금 같은 상태 변경 요청이 실행된다.
쿼리와 값을 분리 Prepared Statement, 입력값 검증, DB 권한 최소화, 오류 노출 제한.
출력 문맥을 통제 출력 인코딩, CSP, HttpOnly·Secure 쿠키, HTML 입력 제한.
요청 출처를 검증 CSRF 토큰, SameSite 쿠키, Referer 검증, 중요 기능 재인증.
입력값 + SQL 사용자 입력값에 악의적 SQL 구문을 삽입해 DB를 비정상 조작한다.
스크립트 + 브라우저 악성 스크립트를 삽입해 사용자 브라우저에서 실행되게 한다.
로그인 상태 + 요청 사용자의 인증 상태를 악용해 의도하지 않은 요청을 전송시킨다.