웹 보안은 공격 원리, 코드 수준 대응, 로그 해석이 한꺼번에 나오는 단골 영역입니다. 같은 공격이라도 어디서 어떻게 막는지까지 말할 수 있어야 만점이 나옵니다. 이번 8문제는 그 관점으로 구성했습니다.
이 문제들은 학습용으로 직접 만든 예상문제이며 실제 시험과 다를 수 있습니다. 최신 출제 범위와 일정은 KISA 등 공식 공지를 확인하세요. 정답과 해설은 접혀 있으니, 먼저 스스로 답을 적어 본 뒤 눌러서 확인하세요.
이 글의 구성
- 스크립트 기반 공격: XSS, CSRF(문제 1~2)
- 인젝션 계열: SQL 인젝션과 블라인드 기법(문제 3~4)
- 서버 측 공격과 방어: 파일 업로드, 트래버설, SSRF, 보안 헤더(문제 5~8)
문제 1. XSS의 종류와 대응
XSS 공격의 세 가지 유형을 쓰고, 방어 방법 세 가지를 쓰시오.
정답 및 해설 보기
정답 유형: 저장형(Stored), 반사형(Reflected), DOM 기반. 방어: 출력 시 HTML 인코딩(이스케이프), 콘텐츠 보안 정책(CSP) 적용, 쿠키에 HttpOnly 설정
저장형은 게시글처럼 서버에 저장된 스크립트가 다른 사용자에게 실행되는 유형, 반사형은 URL 파라미터가 응답에 그대로 반영되는 유형입니다. DOM 기반은 서버를 거치지 않고 브라우저의 자바스크립트가 입력을 처리하다가 발생합니다. 입력 검증도 필요하지만 핵심은 출력 인코딩입니다.
문제 2. CSRF와 XSS의 차이
CSRF의 공격 원리를 설명하고 XSS와 구별되는 점, 대응 방법 두 가지를 쓰시오.
정답 및 해설 보기
정답 CSRF는 로그인된 사용자의 브라우저가 공격자가 의도한 요청을 자신의 권한으로 서버에 보내게 만드는 공격이다. 대응: CSRF 토큰(요청마다 예측 불가능한 값 검증), SameSite 쿠키 속성, 중요 작업 재인증
XSS는 사용자 브라우저에서 악성 스크립트를 실행시켜 사이트가 사용자를 신뢰하는 점을 노리고, CSRF는 서버가 브라우저의 요청을 신뢰하는 점을 노립니다. Referer와 Origin 헤더 검증도 보조 수단으로 씁니다.
문제 3. SQL 인젝션 로그인 우회
아래 쿼리에서 id 입력란에 admin’ — (끝에 공백 포함)를 넣으면 어떻게 되는지 쓰고, 근본적인 대응 방법을 쓰시오.
SELECT * FROM users WHERE id='$id' AND pw='$pw'
정답 및 해설 보기
정답 실제 실행 쿼리가 SELECT * FROM users WHERE id=’admin’ — ‘ AND pw=” 가 되어 — 뒤가 주석 처리되므로 비밀번호 검사 없이 admin으로 로그인된다. 대응: Prepared Statement(바인딩 변수) 사용
MySQL에서 한 줄 주석 –는 뒤에 공백이 있어야 주석으로 동작합니다(# 도 사용 가능). 입력값 검증, 최소 권한 DB 계정, 오류 메시지 숨김은 보조 방어입니다.
문제 4. 블라인드 SQL 인젝션
응답 화면에 쿼리 결과가 직접 나오지 않을 때 쓰는 블라인드 SQL 인젝션의 두 가지 방식을 쓰고, 예시 구문을 하나씩 쓰시오.
정답 및 해설 보기
정답 불린 기반: id=1 AND 1=1 과 id=1 AND 1=2 의 응답 차이로 참·거짓 판별. 시간 기반: id=1 AND SLEEP(5) (MySQL)처럼 응답 지연으로 판별
공격자는 이런 참·거짓 질문을 한 글자씩 반복해서 DB 이름이나 데이터를 추출합니다. 같은 요청이 짧은 시간에 수백 번 들어오는 로그가 탐지 단서가 됩니다.
문제 5. 파일 업로드 취약점
게시판 파일 업로드 기능으로 웹쉘이 올라가는 공격을 막기 위한 대응 방법 네 가지를 쓰시오.
정답 및 해설 보기
정답 ① 서버 측에서 확장자 화이트리스트 검증 ② 업로드 디렉터리의 스크립트 실행 권한 제거 ③ 저장 파일명을 무작위로 변경 ④ 파일 내용(시그니처)과 크기 검증
클라이언트 쪽 자바스크립트 검증은 우회가 쉬워서 반드시 서버에서 확인해야 합니다. 업로드 파일은 웹 루트 밖에 저장하고 다운로드 스크립트로만 제공하는 방법도 많이 씁니다.
문제 6. 디렉터리 트래버설
download.php?file=../../../../etc/passwd 와 같은 요청이 들어올 때 공격 유형을 쓰고, 대응 방법 두 가지를 쓰시오. 이 공격은 URL 인코딩으로 어떻게 변형될 수 있는가.
정답 및 해설 보기
정답 디렉터리 트래버설(경로 조작). 대응: 파일 경로를 정규화한 뒤 허용된 기준 디렉터리 안인지 검사, 파일명을 직접 받지 않고 식별자와 매핑하는 화이트리스트 방식. 변형: ../ 를 %2e%2e%2f 로 인코딩해 필터를 우회한다.
단순히 ../ 문자열을 지우는 필터는 ….// 같은 입력으로 우회되기도 하므로 입력을 치환하는 방식보다 정규화 후 검사를 권장합니다.
문제 7. SSRF
서버가 사용자가 입력한 URL의 내용을 대신 가져오는 기능에서 발생하는 SSRF 공격의 위험과 대응 방법을 클라우드 환경을 예로 들어 쓰시오.
정답 및 해설 보기
정답 공격자가 서버를 이용해 내부망이나 169.254.169.254 같은 클라우드 메타데이터 주소에 요청을 보내 임시 자격 증명 등을 탈취할 수 있다. 대응: 허용 도메인 화이트리스트, 내부·링크로컬 대역 차단, 리다이렉트 제한, 메타데이터 서비스는 토큰 방식(IMDSv2) 사용
방화벽은 외부에서 내부로의 접근은 막지만, SSRF는 신뢰받는 내부 서버가 요청을 대신하므로 방화벽을 우회합니다.
문제 8. HTTP 보안 헤더
다음 목적에 맞는 HTTP 응답 헤더를 쓰시오. (가) HTTPS 강제 (나) 브라우저의 MIME 타입 추측 방지 (다) 클릭재킹 방지를 위한 프레임 삽입 제한 (라) 스크립트·리소스 출처 제한
정답 및 해설 보기
정답 (가) Strict-Transport-Security (나) X-Content-Type-Options: nosniff (다) X-Frame-Options (또는 CSP의 frame-ancestors) (라) Content-Security-Policy
HSTS는 한 번 접속한 뒤 정해진 기간 동안 브라우저가 HTTP 접속을 자동으로 HTTPS로 바꾸게 합니다. 보안 헤더는 적용 비용이 낮은 방어이니 설정 위치(웹 서버 설정)까지 함께 알아 두세요.
공부 팁 3가지
- 공격 이름만 외우지 말고 “원리 → 로그에서 보이는 흔적 → 코드 수준 대응” 세 칸으로 정리하세요.
- 로그 해석 문제를 위해 URL 인코딩(%27, %3C, %2e 등)을 눈에 익혀 두세요.
- OWASP Top 10 최신 항목을 훑어 보면 개념이 연결됩니다. 다만 시험에서는 실제 공지된 출제 범위가 우선입니다.
면책: 이 글의 문제는 학습용으로 직접 만든 예상문제이며 실제 시험과 다를 수 있습니다. 시험 범위, 일정, 합격 기준은 KISA 등 공식 공지를 확인하세요.