icon

안동민 개발노트

4장 : 어플리케이션보안

XSS, CSRF, 파일 업로드 취약점

웹보안에서 SQL Injection만큼 자주 나오는 XSS, CSRF, 파일 업로드 취약점을 정리합니다.

웹보안에서 SQL Injection만큼 자주 나오는 XSS, CSRF, 파일 업로드 취약점을 정리합니다.

SQL Injection = 입력값에 SQL 구문을 삽입하여 DB를 공격하는 기법
핵심 대응 = Prepared Statement, 입력값 검증, DB 권한 최소화, 오류 메시지 제한
XSS
CSRF
파일 업로드 취약점

이 세 가지는 필기와 실기 모두에서 매우 중요합니다. 특히 실기에서는 다음 형태로 자주 출제될 수 있습니다.

XSS의 개념과 대응 방안을 설명하시오.
Stored XSS와 Reflected XSS의 차이를 설명하시오.
CSRF의 개념과 대응 방안을 설명하시오.
파일 업로드 취약점의 위험과 대응 방안을 설명하시오.
웹셸 업로드를 방지하기 위한 대책을 설명하시오.

학습 목표

이번 절가 끝나면 다음 질문에 답할 수 있어야 합니다.

질문목표
XSS란 무엇인가?웹페이지에 악성 스크립트를 삽입해 사용자 브라우저에서 실행시키는 공격이라고 설명
XSS의 주요 피해는?쿠키 탈취, 세션 탈취, 피싱, 화면 변조 등을 설명
Stored XSS란?악성 스크립트가 서버에 저장된 뒤 여러 사용자에게 실행되는 방식이라고 설명
Reflected XSS란?요청값이 응답에 반사되어 스크립트가 실행되는 방식이라고 설명
DOM-based XSS란?브라우저 측 스크립트가 DOM을 안전하지 않게 처리해 발생한다고 설명
XSS 대응책은?출력값 인코딩, 입력값 검증, CSP, HttpOnly 쿠키 등을 설명
CSRF란 무엇인가?로그인된 사용자의 인증 상태를 악용해 원치 않는 요청을 보내게 하는 공격이라고 설명
CSRF 대응책은?CSRF Token, SameSite 쿠키, Origin/Referer 검증, 재인증 등을 설명
파일 업로드 취약점이란?악성 파일 업로드로 서버 실행, 정보 유출, 서비스 장악이 발생할 수 있는 취약점이라고 설명
웹셸이란?서버에서 명령 실행이나 파일 조작을 가능하게 하는 악성 스크립트 파일이라고 설명
파일 업로드 대응책은?확장자·MIME·매직넘버 검증, 저장 경로 분리, 실행 권한 제거, 파일명 변경 등을 설명

취약점 전체 지도

취약점핵심 공격 대상핵심 위험핵심 대응
XSS사용자 브라우저쿠키 탈취, 피싱, 화면 변조출력값 인코딩, CSP, HttpOnly
CSRF사용자의 인증 상태원치 않는 요청 수행CSRF Token, SameSite, 재인증
파일 업로드 취약점서버웹셸 업로드, 서버 장악파일 검증, 저장 분리, 실행 차단

쉽게 구분하면 다음입니다.

SQL Injection = DB 공격
XSS = 사용자 브라우저 공격
CSRF = 사용자의 로그인 상태 악용
파일 업로드 취약점 = 서버에 악성 파일 업로드

XSS

XSS란?

XSS는 Cross-Site Scripting의 약자입니다.

시험식 정의는 다음입니다.

XSS는 웹 애플리케이션이 사용자 입력값을 적절히 검증하거나 출력 시 인코딩하지 않아 악성 스크립트가 사용자 브라우저에서 실행되는 공격이다.

핵심 의미는 다음과 같다.

XSS = 웹페이지에 악성 스크립트를 넣어 다른 사용자 브라우저에서 실행시키는 공격

중요한 점은 공격 대상입니다.

SQL Injection의 직접 대상 = DB
XSS의 직접 대상 = 사용자 브라우저

XSS가 발생하는 원리

XSS는 보통 다음 흐름으로 발생합니다.

1. 공격자가 입력 가능한 곳에 악성 스크립트 형태의 값을 넣는다.
2. 서버가 그 값을 안전하게 처리하지 않고 저장하거나 응답에 포함한다.
3. 다른 사용자의 브라우저가 해당 페이지를 열 때 스크립트가 실행된다.
4. 쿠키 탈취, 피싱, 화면 변조 등이 발생할 수 있다.

취약한 위치는 다음과 같습니다.

위치예시
게시판제목, 내용, 댓글
검색창검색어가 결과 페이지에 다시 출력되는 경우
프로필닉네임, 자기소개
관리자 페이지사용자 입력값을 관리자 화면에 표시
URL 파라미터요청값이 응답에 그대로 포함
오류 메시지입력값이 오류 화면에 출력
API 응답사용자 입력값이 JSON, HTML에 반영

핵심 원인은 다음입니다.

사용자 입력값을 출력할 때 문맥에 맞게 인코딩하지 않기 때문

XSS의 주요 피해

XSS는 사용자의 브라우저에서 실행되기 때문에 다음 피해가 발생할 수 있습니다.

피해설명
쿠키 탈취세션 쿠키 탈취로 로그인 상태 악용
세션 하이재킹탈취한 세션으로 사용자 권한 사용
피싱가짜 로그인 창을 띄워 계정 정보 수집
화면 변조웹페이지 내용 변경
악성 사이트 유도사용자를 공격자 사이트로 이동
사용자 행위 대리 수행사용자 권한으로 요청 수행
키 입력 탈취입력값을 몰래 수집
관리자 계정 공격관리자가 취약 페이지를 볼 경우 피해 확대

특히 실기 답안에서는 다음 문장을 활용한다.

XSS는 사용자의 브라우저에서 악성 스크립트를 실행시켜 쿠키 탈취, 세션 탈취, 피싱, 화면 변조 등을 유발할 수 있다.

XSS의 종류

정보보안기사 수준에서 반드시 알아야 할 XSS 유형은 세 가지입니다.

Stored XSS
Reflected XSS
DOM-based XSS

Stored XSS

Stored XSS란?

Stored XSS는 악성 스크립트가 서버에 저장된 뒤, 해당 데이터를 조회하는 사용자에게 실행되는 방식입니다.

시험식 정의는 다음입니다.

Stored XSS는 공격자가 게시글, 댓글, 프로필 등 서버에 저장되는 입력값에 악성 스크립트를 삽입하고, 이를 조회하는 사용자의 브라우저에서 스크립트가 실행되는 공격이다.
핵심 의미
Stored XSS = 서버에 저장되는 XSS

Stored XSS 예시 상황

예를 들어 게시판 댓글 기능이 있다고 합시다.

1. 공격자가 댓글에 악성 스크립트 형태의 값을 입력한다.
2. 서버가 해당 값을 DB에 저장한다.
3. 다른 사용자가 게시글을 조회한다.
4. 저장된 악성 스크립트가 사용자 브라우저에서 실행된다.

Stored XSS는 피해 범위가 클 수 있습니다.

왜냐하면 한 번 저장되면 여러 사용자가 계속 피해를 볼 수 있기 때문입니다.

특징설명
저장 위치서버 DB, 게시판, 댓글, 프로필 등
피해 범위다수 사용자에게 반복 피해 가능
위험도일반적으로 높음
탐지 위치저장 데이터, 응답 페이지, WAF 로그

Reflected XSS

Reflected XSS란?

Reflected XSS는 사용자의 요청값이 서버 응답에 그대로 반사되어 브라우저에서 실행되는 방식입니다.

시험식 정의는 다음입니다.

Reflected XSS는 공격자가 조작한 요청 파라미터가 서버 응답 페이지에 그대로 포함되어 사용자의 브라우저에서 악성 스크립트가 실행되는 공격이다.
핵심 의미
Reflected XSS = 요청값이 응답에 반사되는 XSS

Reflected XSS 예시 상황

예를 들어 검색 기능이 있다고 합시다.

/search?keyword=입력값

서버가 검색 결과 페이지에 다음처럼 출력합니다.

입력값에 대한 검색 결과입니다.

이때 입력값을 안전하게 인코딩하지 않으면 공격자가 조작한 링크를 피해자에게 보내고, 피해자가 그 링크를 클릭했을 때 스크립트가 실행될 수 있습니다.

특징설명
저장 여부서버에 저장되지 않음
공격 방식조작된 URL, 피싱 링크
실행 시점피해자가 링크 클릭 시
주요 위험쿠키 탈취, 피싱, 악성 사이트 유도

Stored XSS와 비교하면 다음입니다.

구분Stored XSSReflected XSS
저장 여부서버에 저장됨서버에 저장되지 않음
피해 방식페이지 조회자에게 반복 실행조작된 링크 클릭 시 실행
주 위치게시판, 댓글, 프로필검색, 오류 페이지, URL 파라미터
위험다수 사용자 피해 가능피싱과 결합되기 쉬움

DOM-based XSS

DOM이란?

DOM은 Document Object Model입니다.

DOM은 브라우저가 HTML 문서를 객체 구조로 표현한 것이다.

웹페이지에서 JavaScript는 DOM을 조작해 화면 내용을 바꿉니다.


DOM-based XSS란?

DOM-based XSS는 서버 응답이 아니라 브라우저 측 JavaScript가 사용자 입력값을 안전하지 않게 처리하여 발생하는 XSS입니다.

시험식 정의는 다음입니다.

DOM-based XSS는 클라이언트 측 스크립트가 URL, 해시, 입력값 등 외부 데이터를 안전하게 처리하지 않고 DOM에 삽입하여 브라우저에서 악성 스크립트가 실행되는 공격이다.
핵심 의미
DOM-based XSS = 브라우저의 JavaScript 처리 과정에서 발생하는 XSS

Stored, Reflected XSS가 서버 응답과 관련이 깊다면, DOM-based XSS는 클라이언트 측 코드와 관련이 깊습니다.

구분핵심 원인
Stored XSS악성 입력값이 서버에 저장됨
Reflected XSS요청값이 서버 응답에 반사됨
DOM-based XSS브라우저 JavaScript가 DOM에 위험하게 삽입

XSS 대응책 전체 지도

XSS 대응에서 가장 중요한 것은 출력값 인코딩입니다.

많은 사람이 입력값 검증만 떠올리지만, XSS의 핵심 방어는 다음입니다.

사용자 입력값을 화면에 출력할 때 문맥에 맞게 안전하게 인코딩한다.

주요 대응책은 다음입니다.

대응책설명
출력값 인코딩HTML, JavaScript, URL 등 문맥에 맞게 인코딩
입력값 검증허용된 형식, 길이, 문자만 입력 허용
CSP 적용허용된 스크립트만 실행되도록 제한
HttpOnly 쿠키JavaScript의 쿠키 접근 제한
Secure 쿠키HTTPS에서만 쿠키 전송
SameSite 쿠키CSRF와 일부 세션 악용 완화
위험한 HTML 태그 제한게시판 등에서 스크립트 실행 요소 제한
보안 라이브러리 사용검증된 템플릿 엔진과 인코딩 기능 사용
WAF 적용XSS 패턴 탐지·차단
관리자 페이지 보호관리자 화면에서 사용자 입력 출력 시 특히 주의

출력값 인코딩

출력값 인코딩이란?

출력값 인코딩은 사용자 입력값을 웹페이지에 출력할 때 브라우저가 코드로 해석하지 않고 문자로만 표시하도록 변환하는 것입니다.

시험식 정의는 다음입니다.

출력값 인코딩은 사용자 입력값이 HTML, JavaScript, URL 등 출력 위치에서 실행 가능한 코드로 해석되지 않도록 특수문자를 안전한 표현으로 변환하는 보안 조치이다.
핵심 의미
출력값 인코딩 = 입력값을 코드가 아니라 글자로 보이게 만드는 것

문맥별 인코딩

XSS에서 중요한 것은 출력 위치에 따라 인코딩 방식이 달라진다는 점입니다.

출력 위치필요한 처리
HTML 본문HTML 인코딩
HTML 속성속성 문맥 인코딩
JavaScript 내부JavaScript 문맥 인코딩
URLURL 인코딩
CSSCSS 문맥 주의

시험에서는 너무 깊은 구현보다 다음 문장을 기억하면 됩니다.

XSS 방어를 위해 사용자 입력값은 출력되는 문맥에 맞게 인코딩해야 한다.

CSP

CSP란?

CSP는 Content Security Policy입니다.

시험식 정의는 다음입니다.

CSP는 브라우저가 허용된 출처의 스크립트, 스타일, 이미지 등만 실행하거나 로드하도록 제한하는 보안 정책이다.
핵심 의미
CSP = 브라우저에게 어떤 스크립트를 허용할지 알려주는 보안 정책

CSP는 XSS 피해를 줄이는 데 도움이 됩니다.

효과설명
외부 악성 스크립트 차단허용된 출처만 로드
인라인 스크립트 제한페이지 내 삽입 스크립트 실행 제한
XSS 피해 완화스크립트 실행 가능성 감소
정책 위반 보고공격 시도 탐지에 활용 가능

중요한 점은 다음입니다.

CSP는 XSS 완화 대책이지, 출력값 인코딩을 대체하는 근본 대책은 아니다.

HttpOnly와 XSS

HttpOnly 쿠키는 JavaScript에서 쿠키에 접근하지 못하게 합니다.

XSS 공격이 발생해도 세션 쿠키 탈취 위험을 줄일 수 있습니다.

HttpOnly = JavaScript 쿠키 접근 제한

하지만 HttpOnly만으로 XSS가 해결되는 것은 아닙니다.

왜냐하면 XSS는 쿠키 탈취 외에도 피싱, 화면 변조, 사용자 행위 대리 수행 등을 할 수 있기 때문입니다.

시험식 정리
HttpOnly 쿠키는 XSS로 인한 세션 쿠키 탈취를 완화할 수 있지만, XSS 자체를 제거하는 것은 아니므로 출력값 인코딩, 입력값 검증, CSP 적용이 함께 필요하다.

XSS 실기 답안

문제: XSS의 개념과 대응 방안을 설명하시오.

좋은 답안은 다음과 같습니다.

XSS는 웹 애플리케이션이 사용자 입력값을 적절히 처리하지 않아 악성 스크립트가 다른 사용자의 브라우저에서 실행되는 공격이다. 이를 통해 쿠키 탈취, 세션 하이재킹, 피싱, 화면 변조 등이 발생할 수 있으며, 대응 방안으로는 출력값 인코딩, 입력값 검증, CSP 적용, HttpOnly·Secure 쿠키 설정, WAF 적용 등이 있다.

채점 포인트는 다음입니다.

요소포함 여부
악성 스크립트필수
사용자 브라우저에서 실행필수
쿠키·세션 탈취중요
출력값 인코딩매우 중요
CSP, HttpOnly좋음

CSRF

CSRF란?

CSRF는 Cross-Site Request Forgery입니다.

한국어로는 사이트 간 요청 위조입니다.

시험식 정의는 다음입니다.

CSRF는 사용자가 특정 웹사이트에 로그인된 상태를 악용하여, 사용자가 의도하지 않은 요청을 해당 사이트로 전송하게 만드는 공격이다.
핵심 의미
CSRF = 로그인 상태를 악용해 원치 않는 요청을 보내게 하는 공격

핵심은 다음입니다.

공격자가 사용자의 인증 상태를 이용한다.

CSRF 발생 원리

CSRF는 보통 다음 흐름으로 발생합니다.

1. 사용자가 정상 사이트에 로그인한다.
2. 브라우저에는 해당 사이트의 세션 쿠키가 저장되어 있다.
3. 사용자가 공격자가 만든 페이지나 링크에 접근한다.
4. 공격자가 만든 요청이 정상 사이트로 전송된다.
5. 브라우저는 저장된 쿠키를 자동으로 함께 보낸다.
6. 서버가 요청의 진짜 의도를 검증하지 않으면 요청이 처리된다.

예를 들어 다음 기능이 있다고 생각해봅시다.

비밀번호 변경
이메일 변경
게시글 작성
송금 요청
상품 주문
관리자 설정 변경

이런 상태 변경 요청이 CSRF에 취약하면 사용자가 원하지 않는 행위가 수행될 수 있습니다.


CSRF의 주요 피해

피해설명
비밀번호 변경사용자가 원치 않는 계정 설정 변경
이메일 변경계정 복구 수단 탈취 가능
게시글 작성사용자 명의의 글 작성
송금 요청금융 거래 조작
상품 주문원치 않는 결제·주문
관리자 설정 변경관리자가 로그인된 상태라면 피해 확대
권한 변경계정 권한 변경 가능

실기에서 중요한 문장은 다음입니다.

CSRF는 사용자의 로그인 세션을 악용하여 사용자가 의도하지 않은 상태 변경 요청을 서버에 전송하게 만드는 공격이다.

XSS와 CSRF 비교

XSS와 CSRF는 자주 헷갈립니다.

구분XSSCSRF
핵심악성 스크립트 실행요청 위조
공격 대상사용자 브라우저사용자의 인증 상태
피해쿠키 탈취, 피싱, 화면 변조비밀번호 변경, 송금, 게시글 작성
필요 조건입력값이 페이지에서 스크립트로 실행사용자가 로그인된 상태
주요 대응출력값 인코딩, CSP, HttpOnlyCSRF Token, SameSite, 재인증
한 줄 암기스크립트 실행원치 않는 요청
암기 문장
XSS는 브라우저에서 악성 스크립트를 실행시키는 공격이고, CSRF는 사용자의 로그인 상태를 악용해 원치 않는 요청을 보내게 하는 공격이다.

CSRF 대응책

CSRF 대응책은 다음이 중요합니다.

CSRF Token
SameSite Cookie
Origin/Referer 검증
중요 기능 재인증
GET으로 상태 변경 금지

CSRF Token

CSRF Token은 CSRF 방어의 핵심입니다.

시험식 정의는 다음입니다.

CSRF Token은 서버가 사용자 세션에 대해 예측 불가능한 토큰을 생성하고, 상태 변경 요청 시 해당 토큰을 함께 제출하도록 하여 요청의 정당성을 검증하는 값이다.
핵심 의미
CSRF Token = 정상 페이지에서 온 요청인지 확인하는 비밀값

동작 흐름은 다음입니다.

1. 서버가 사용자 세션에 CSRF Token을 생성한다.
2. 정상 페이지의 폼이나 요청에 토큰을 포함한다.
3. 사용자가 요청을 보낼 때 토큰이 함께 전송된다.
4. 서버는 세션의 토큰과 요청 토큰을 비교한다.
5. 일치하면 처리하고, 없거나 틀리면 거부한다.

중요한 조건은 다음입니다.

조건설명
예측 불가능해야 함공격자가 추측할 수 없어야 함
서버에서 검증해야 함클라이언트에만 맡기면 안 됨
세션과 연결되어야 함사용자별로 구분되어야 함
상태 변경 요청에 적용POST, PUT, DELETE 등
토큰 재사용 관리중요한 요청은 일회성 또는 짧은 유효기간 고려

SameSite 쿠키

SameSite는 쿠키가 다른 사이트에서 발생한 요청에 자동으로 포함되는 것을 제한합니다.

SameSite = 다른 사이트 요청에서 쿠키 전송 제한
효과
CSRF 위험 완화

주요 값은 다음과 같습니다.

의미
Strict같은 사이트 요청에서만 쿠키 전송
Lax일부 안전한 교차 사이트 이동은 허용
None모든 교차 사이트 요청에 전송 가능, Secure 필요

시험에서는 깊은 값보다 다음을 기억하면 됩니다.

SameSite 쿠키 속성은 다른 사이트에서 발생한 요청에 쿠키가 자동 전송되는 것을 제한하여 CSRF 위험을 줄인다.

Origin / Referer 검증

Origin 또는 Referer 헤더를 확인하여 요청이 신뢰할 수 있는 출처에서 왔는지 검증할 수 있습니다.

헤더의미
Origin요청이 시작된 출처
Referer이전 페이지 주소

하지만 이 헤더만 단독으로 의존하는 것은 부족할 수 있습니다.

시험식 정리
Origin/Referer 검증은 CSRF 대응에 도움이 되지만, 헤더 누락이나 환경 차이가 있을 수 있으므로 CSRF Token과 함께 사용하는 것이 바람직하다.

중요 기능 재인증

비밀번호 변경, 송금, 관리자 설정 변경 같은 중요 기능은 재인증이 필요합니다.

비밀번호 재입력
OTP 확인
MFA 확인
효과
CSRF 요청만으로 중요 기능이 처리되는 위험 감소

GET으로 상태 변경 금지

GET은 조회에 사용해야 합니다.

상태를 변경하는 기능은 GET으로 처리하면 안 됩니다.

나쁜 예
GET 요청으로 비밀번호 변경
GET 요청으로 게시글 삭제
GET 요청으로 관리자 설정 변경

왜 위험할까요?

GET 요청은 이미지, 링크, 리다이렉션 등으로 쉽게 유도될 수 있기 때문입니다.

시험식 문장
상태를 변경하는 기능은 GET 방식으로 처리하지 말고 POST, PUT, DELETE 등 적절한 메서드를 사용하며, CSRF Token과 권한 검증을 적용해야 한다.

CSRF 실기 답안

문제: CSRF의 개념과 대응 방안을 설명하시오.

좋은 답안은 다음과 같습니다.

CSRF는 사용자가 웹사이트에 로그인된 상태를 악용하여 사용자가 의도하지 않은 요청을 서버에 전송하게 만드는 공격이다. 대응 방안으로는 예측 불가능한 CSRF Token을 생성해 서버에서 검증하고, SameSite 쿠키 설정, Origin/Referer 검증, 중요 기능 재인증, GET 방식의 상태 변경 금지 등을 적용해야 한다.

채점 포인트는 다음입니다.

요소포함 여부
로그인 상태 악용필수
원치 않는 요청필수
CSRF Token매우 중요
SameSite중요
Origin/Referer좋음
재인증좋음

파일 업로드 취약점

파일 업로드 취약점이란?

파일 업로드 취약점은 사용자가 업로드한 파일을 서버가 안전하게 검증하지 않아 악성 파일이 저장되거나 실행될 수 있는 취약점입니다.

시험식 정의는 다음입니다.

파일 업로드 취약점은 업로드 파일의 확장자, 내용, 크기, 저장 위치, 실행 권한 등을 적절히 검증하지 않아 악성 파일 업로드, 웹셸 실행, 정보 유출, 서버 장악 등이 발생할 수 있는 취약점이다.
핵심 의미
파일 업로드 취약점 = 서버에 위험한 파일을 올려 실행하거나 악용하는 취약점

파일 업로드가 위험한 이유

파일 업로드 기능은 정상적으로는 필요합니다.

프로필 사진 업로드
게시판 첨부파일 업로드
문서 업로드
상품 이미지 업로드
증빙자료 업로드

하지만 검증이 부실하면 공격자가 악성 파일을 업로드할 수 있습니다.

위험설명
웹셸 업로드서버 명령 실행 가능성
악성코드 유포다른 사용자가 다운로드해 감염
서버 저장공간 고갈대용량 파일 업로드
파일 덮어쓰기기존 파일 변조
경로 조작의도하지 않은 위치에 저장
개인정보 유출업로드 파일 접근통제 미흡
스크립트 실행업로드 파일이 웹 서버에서 실행
콘텐츠 타입 우회이미지처럼 위장한 악성 파일

웹셸

웹셸이란?

웹셸은 웹 서버에서 실행되어 공격자가 서버 명령 실행, 파일 조작, DB 접근 등을 수행할 수 있게 하는 악성 스크립트입니다.

시험식 정의는 다음입니다.

웹셸은 웹 서버에서 실행 가능한 악성 스크립트 파일로, 공격자가 웹을 통해 서버 명령 실행, 파일 업로드·다운로드, 내부 정보 조회 등을 수행할 수 있게 하는 악성 도구이다.
핵심 의미
웹셸 = 웹으로 조종하는 서버 악성 스크립트

웹셸이 업로드되어 실행되면 피해가 매우 큽니다.

피해설명
서버 명령 실행시스템 명령 수행 가능
파일 조작파일 조회, 수정, 삭제
추가 악성코드 설치백도어, 루트킷 설치 가능
내부망 이동내부 시스템 공격 거점
DB 정보 탈취DB 접속 정보 유출
홈페이지 변조웹페이지 내용 변경
로그 삭제 시도침입 흔적 은폐

파일 업로드 취약점 발생 원인

파일 업로드 취약점은 다음 원인으로 발생합니다.

원인설명
확장자 검증 미흡실행 가능한 확장자 업로드 허용
MIME Type만 신뢰클라이언트가 보낸 Content-Type을 그대로 신뢰
파일 내용 검증 미흡실제 파일 내용 확인 없음
파일 크기 제한 없음대용량 업로드로 저장공간 고갈
저장 경로 부적절웹에서 직접 실행 가능한 경로에 저장
실행 권한 허용업로드 파일이 서버에서 실행됨
파일명 미검증경로 조작, 덮어쓰기 가능
접근통제 미흡업로드 파일을 누구나 열람
악성코드 검사 없음악성 파일 저장·배포 가능

핵심은 다음입니다.

업로드 파일은 신뢰할 수 없는 입력값이다.

파일 업로드 대응책

파일 업로드 취약점 대응은 여러 단계로 해야 합니다.

대응책설명
허용 확장자 방식이미지라면 jpg, png 등 필요한 확장자만 허용
위험 확장자 차단서버 실행 가능 확장자 차단
MIME Type 검증Content-Type 확인, 단독 신뢰 금지
파일 시그니처 검증실제 파일 내용, 매직넘버 확인
파일 크기 제한대용량 업로드 제한
파일명 변경난수화된 파일명으로 저장
저장 경로 분리웹 루트 밖 또는 별도 저장소에 저장
실행 권한 제거업로드 디렉터리에서 스크립트 실행 금지
접근통제 적용권한 있는 사용자만 다운로드 가능
악성코드 검사백신, 샌드박스 검사
이미지 재처리이미지 파일은 리사이징·재인코딩
다운로드 강제실행이 아니라 다운로드되도록 처리
로그 모니터링비정상 업로드, 반복 시도 탐지

허용 확장자 방식

확장자 검증은 차단목록보다 허용목록 방식이 바람직합니다.

허용목록 = 허용된 확장자만 업로드 가능

예를 들어 프로필 이미지는 다음만 허용합니다.

jpg
jpeg
png
gif

그 외는 모두 거부합니다.

시험식 문장
파일 업로드 검증은 위험 확장자만 차단하는 방식보다 업무에 필요한 확장자만 허용하는 허용목록 방식을 적용하는 것이 바람직하다.

MIME Type만 신뢰하면 안 되는 이유

MIME Type은 클라이언트가 보낼 수 있는 값입니다.

예를 들어 브라우저나 요청에서 파일의 Content-Type이 이미지라고 표시되어도, 실제 내용이 이미지라고 보장되지는 않습니다.

따라서 MIME Type만 믿으면 안 됩니다.

MIME Type + 확장자 + 파일 시그니처를 함께 검증해야 한다.

파일 시그니처, 매직넘버 검증

파일 시그니처는 파일 내용의 시작 부분에 있는 고유한 식별값입니다.

이를 통해 실제 파일 형식을 확인할 수 있습니다.

시험에서는 구현보다 개념만 기억하면 됩니다.

확장자나 MIME Type은 조작될 수 있으므로 실제 파일 내용인 파일 시그니처를 함께 확인해야 한다.

저장 경로 분리

업로드 파일은 웹에서 직접 실행 가능한 경로에 저장하면 위험합니다.

나쁜 구조
웹 루트 하위에 업로드 파일 저장
업로드 파일이 URL로 직접 접근되어 실행 가능
좋은 구조
웹 루트 외부 저장
별도 파일 서버 또는 객체 저장소 사용
다운로드 컨트롤러를 통해 권한 검증 후 제공
시험식 문장
업로드 파일은 웹 루트 밖의 별도 경로에 저장하고, 다운로드 시 서버가 접근권한을 검증한 후 제공해야 한다.

실행 권한 제거

업로드 디렉터리에서는 스크립트 실행을 금지해야 합니다.

업로드 파일은 저장만 가능
서버에서 실행은 불가

예를 들어 업로드 디렉터리에서 스크립트, CGI, 서버사이드 코드가 실행되지 않도록 설정해야 합니다.

시험식 문장
업로드 디렉터리에는 실행 권한을 제거하여 업로드된 파일이 웹 서버에서 스크립트로 실행되지 않도록 해야 한다.

파일명 변경

공격자는 파일명에 경로 조작 문자열이나 특수문자를 넣을 수 있습니다.

따라서 원본 파일명을 그대로 저장하지 않는다.

대응
서버에서 난수 기반 파일명 생성
확장자는 검증 후 부여
파일명 길이 제한
특수문자 제거
중복 파일명 처리
시험식 문장
업로드 파일명은 원본 이름을 그대로 사용하지 말고 서버에서 난수화된 이름으로 변경하여 경로 조작, 덮어쓰기, 특수문자 악용을 방지해야 한다.

파일 업로드 실기 답안

문제: 파일 업로드 취약점의 위험과 대응 방안을 설명하시오.

좋은 답안은 다음과 같습니다.

파일 업로드 취약점은 업로드 파일의 확장자, 내용, 크기, 저장 위치, 실행 권한 등을 검증하지 않아 웹셸이나 악성 파일이 서버에 업로드·실행될 수 있는 취약점이다. 대응 방안으로는 허용 확장자 방식 적용, MIME Type과 파일 시그니처 검증, 파일 크기 제한, 파일명 난수화, 웹 루트 외부 저장, 업로드 디렉터리 실행 권한 제거, 접근통제, 악성코드 검사 등을 적용해야 한다.

채점 포인트는 다음입니다.

요소포함 여부
파일 검증 미흡필수
웹셸·악성 파일필수
허용 확장자중요
파일 시그니처 검증좋음
저장 경로 분리중요
실행 권한 제거매우 중요
접근통제·악성코드 검사좋음

XSS, CSRF, 파일 업로드 비교

구분XSSCSRF파일 업로드 취약점
핵심악성 스크립트 실행원치 않는 요청 전송악성 파일 업로드
주요 대상사용자 브라우저사용자의 인증 상태서버
주요 피해쿠키 탈취, 피싱, 화면 변조비밀번호 변경, 송금, 게시글 작성웹셸 실행, 서버 장악
주요 원인출력값 인코딩 미흡요청 정당성 검증 미흡파일 검증·저장·실행 통제 미흡
핵심 대응출력값 인코딩, CSPCSRF Token, SameSite허용 확장자, 저장 분리, 실행 차단
보조 대응HttpOnly 쿠키, WAFReferer 검증, 재인증악성코드 검사, 파일명 변경
한 줄 암기
XSS = 브라우저에서 스크립트 실행
CSRF = 로그인 상태로 원치 않는 요청
파일 업로드 = 서버에 악성 파일 업로드

로그에서 보는 공격 징후

XSS 의심 로그

징후의미
파라미터에 스크립트 태그 형태 문자열 포함XSS 시도 가능
이벤트 핸들러 형태 문자열 포함XSS 우회 시도 가능
긴 URL 인코딩 문자열우회 인코딩 가능성
게시판·댓글 저장 요청 반복Stored XSS 시도 가능
WAF의 XSS 탐지 이벤트공격 시도 가능

CSRF 의심 징후

징후의미
중요 기능 요청에 CSRF Token 없음CSRF 취약 가능
Referer 또는 Origin이 비정상외부 사이트 유도 가능
사용자가 의도하지 않은 설정 변경CSRF 피해 가능
GET 요청으로 상태 변경 발생설계 취약
짧은 시간에 동일 기능 반복 요청자동화 또는 위조 요청 가능

파일 업로드 의심 로그

징후의미
허용되지 않은 확장자 업로드 시도악성 파일 가능
이미지 업로드인데 파일 내용이 이미지가 아님위장 파일 가능
업로드 후 즉시 해당 파일 URL 접근웹셸 실행 시도 가능
업로드 파일명에 경로 조작 문자열 포함저장 경로 우회 시도
동일 IP에서 다양한 확장자 반복 업로드우회 시도 가능
업로드 디렉터리에서 실행 요청 발생웹셸 의심

실기형 로그 분석 답안은 이렇게 쓸 수 있습니다.

업로드 요청 이후 동일 IP에서 업로드된 파일 URL로 즉시 접근하는 기록이 있고, 확장자와 실제 파일 형식이 일치하지 않으므로 웹셸 업로드 시도로 의심할 수 있다. 대응 방안으로 업로드 파일을 격리하고, 파일 확장자·MIME·시그니처 검증 여부, 저장 경로와 실행 권한 설정, WAF 및 웹 서버 로그를 점검해야 한다.

내용 연결 정리

게시판이 있는 웹사이트를 예로 들면 다음과 같다.

1. 사용자가 게시글을 작성한다.
2. 게시글 제목과 내용이 서버에 저장된다.
3. 다른 사용자가 게시글을 조회한다.
이때 출력값 인코딩이 없으면
Stored XSS 발생 가능
사용자가 로그인된 상태에서 외부 악성 페이지를 방문하면
CSRF로 게시글 작성, 비밀번호 변경, 설정 변경 요청 가능
게시판에 첨부파일 업로드 기능이 있고 검증이 부실하면
웹셸 또는 악성 파일 업로드 가능
안전하게 만들려면
게시글 출력 시 인코딩
위험한 HTML 제한
CSP 적용
세션 쿠키에 HttpOnly, Secure, SameSite 설정
상태 변경 요청에 CSRF Token 검증
중요 기능 재인증
업로드 파일 허용 확장자 검증
파일 시그니처 검증
웹 루트 외부 저장
업로드 디렉터리 실행 권한 제거
웹 로그와 WAF 로그 모니터링

시험에 나오는 포인트

주제시험 포인트
XSS악성 스크립트가 사용자 브라우저에서 실행
XSS 피해쿠키 탈취, 세션 탈취, 피싱, 화면 변조
Stored XSS악성 스크립트가 서버에 저장
Reflected XSS요청값이 응답에 반사
DOM-based XSS클라이언트 측 DOM 처리에서 발생
XSS 핵심 대응출력값 인코딩
CSP허용된 스크립트만 실행하도록 제한
HttpOnlyJavaScript 쿠키 접근 제한
CSRF로그인 상태를 악용해 원치 않는 요청 전송
CSRF 핵심 대응CSRF Token
SameSite다른 사이트 요청 시 쿠키 전송 제한
Referer/Origin요청 출처 검증
재인증중요 기능 수행 전 추가 인증
파일 업로드 취약점악성 파일 업로드·실행 가능
웹셸웹을 통해 서버 조작이 가능한 악성 스크립트
업로드 대응허용 확장자, MIME·시그니처 검증
저장 경로 분리웹 루트 밖 저장
실행 권한 제거업로드 파일의 서버 실행 차단
파일명 난수화경로 조작, 덮어쓰기 방지

필기형 문제풀이

문제 1

XSS에 대한 설명으로 가장 적절한 것은?

A. 입력값에 SQL 구문을 삽입해 DB를 공격하는 기법
B. 웹페이지에 악성 스크립트를 삽입해 사용자 브라우저에서 실행시키는 공격
C. 서버에 대량 트래픽을 보내 서비스를 마비시키는 공격
D. 출발지 IP 주소를 위조하는 공격

정답: B

XSS는 악성 스크립트를 사용자 브라우저에서 실행시키는 웹 공격입니다.


문제 2

XSS의 주요 피해로 적절하지 않은 것은?

A. 쿠키 탈취
B. 세션 하이재킹
C. 피싱
D. IP 주소를 MAC 주소로 변환

정답: D

IP 주소를 MAC 주소로 변환하는 것은 ARP의 역할입니다.


문제 3

Stored XSS에 대한 설명으로 적절한 것은?

A. 요청 파라미터가 즉시 응답에 반사되어 실행된다
B. 사용자의 로그인 상태를 이용해 요청을 위조한다
C. 악성 스크립트가 서버에 저장된 뒤 사용자 조회 시 실행된다
D. 파일 확장자 검증 실패로 웹셸이 실행된다

정답: C

Stored XSS는 게시글, 댓글, 프로필 등 서버에 저장된 입력값을 통해 발생할 수 있습니다.


문제 4

Reflected XSS에 대한 설명으로 적절한 것은?

A. 악성 스크립트가 게시글에 저장된 뒤 여러 사용자에게 실행된다
B. CSRF Token 없이 상태 변경 요청을 위조한다
C. 업로드된 스크립트 파일이 서버에서 명령을 실행한다
D. 요청 파라미터가 서버 응답에 반사되어 브라우저에서 실행된다

정답: D

Reflected XSS는 조작된 URL이나 요청값이 응답 페이지에 반영될 때 발생할 수 있습니다.


문제 5

XSS 대응책으로 가장 핵심적인 것은?

A. 모든 입력값을 DB에 저장하지 않는 것만으로 해결
B. CSRF Token만 적용
C. 출력값 인코딩
D. 업로드 디렉터리 실행 권한 제거

정답: C

XSS의 핵심 대응은 사용자 입력값을 출력 위치에 맞게 안전하게 인코딩하는 것입니다.


문제 6

HttpOnly 쿠키 속성의 효과로 적절한 것은?

A. CSRF Token 값을 자동으로 생성한다
B. SameSite 설정 없이 교차 사이트 요청을 모두 차단한다
C. DB 쿼리를 자동으로 파라미터화한다
D. JavaScript에서 쿠키 접근을 제한한다

정답: D

HttpOnly는 XSS로 인한 쿠키 탈취 위험을 줄이는 데 도움이 됩니다.


문제 7

CSRF에 대한 설명으로 가장 적절한 것은?

A. 악성 스크립트를 사용자 브라우저에서 실행시키는 공격
B. 악성 파일을 서버에 업로드하는 공격
C. 사용자의 로그인 상태를 악용해 원치 않는 요청을 서버에 보내게 하는 공격
D. SQL 구문과 입력값을 섞어 DB를 조작하는 공격

정답: C

CSRF는 사용자의 인증 상태를 악용하여 상태 변경 요청을 위조하는 공격입니다.


문제 8

CSRF 대응책으로 가장 핵심적인 것은?

A. CSRF Token 검증
B. Origin/Referer 검증을 생략하고 쿠키만 확인
C. 상태 변경 요청에 토큰 검증 없이 세션 쿠키만 확인
D. GET 요청으로 비밀번호 변경 같은 상태 변경을 허용

정답: A

CSRF Token은 요청의 정당성을 검증하는 핵심 대책입니다.


문제 9

SameSite 쿠키 속성의 효과로 적절한 것은?

A. JavaScript에서 쿠키 값을 읽지 못하게 한다
B. SQL 구문과 입력값을 분리한다
C. 파일 업로드 확장자를 허용목록으로 제한한다
D. 다른 사이트에서 발생한 요청에 쿠키가 자동 전송되는 것을 제한한다

정답: D

SameSite는 CSRF 위험을 완화하는 쿠키 속성입니다.


문제 10

파일 업로드 취약점의 위험으로 적절한 것은?

A. SameSite 미설정으로 쿠키가 교차 사이트 요청에 전송됨
B. 출력값 인코딩 누락으로 브라우저에서 스크립트 실행
C. 웹셸 업로드와 서버 명령 실행 가능성
D. CSRF Token 누락으로 상태 변경 요청 위조

정답: C

파일 업로드 검증이 부실하면 웹셸이나 악성 파일이 업로드되어 서버 침해로 이어질 수 있습니다.


문제 11

파일 업로드 보안 대책으로 적절하지 않은 것은?

A. 허용 확장자 방식 적용
B. 파일 시그니처 검증
C. 업로드 디렉터리 실행 권한 제거
D. 업로드 파일을 웹 루트에 저장하고 실행 허용

정답: D

업로드 파일을 웹 루트에 저장하고 실행까지 허용하면 웹셸 실행 위험이 커집니다.


문제 12

웹셸에 대한 설명으로 적절한 것은?

A. 웹 서버에서 실행되어 공격자가 서버 명령 실행이나 파일 조작을 수행할 수 있게 하는 악성 스크립트
B. 게시판 입력값에 저장되어 사용자 브라우저에서 실행되는 스크립트
C. 다른 사이트 요청에 세션 쿠키가 자동 전송되도록 악용하는 요청
D. 업로드 파일의 확장자와 실제 내용을 검증하는 보안 절차

정답: A

웹셸은 파일 업로드 취약점과 자주 연결되는 고위험 악성 파일입니다.


실기형 답안 훈련

실기 예제 1

문제: XSS의 개념과 대응 방안을 설명하시오.

좋은 답안

XSS는 웹 애플리케이션이 사용자 입력값을 적절히 처리하지 않아 악성 스크립트가 다른 사용자의 브라우저에서 실행되는 공격이다. 이를 통해 쿠키 탈취, 세션 하이재킹, 피싱, 화면 변조 등이 발생할 수 있으며, 대응 방안으로는 출력값 인코딩, 입력값 검증, CSP 적용, HttpOnly·Secure 쿠키 설정, WAF 적용 등이 있다.

채점 포인트

요소포함 여부
악성 스크립트필수
사용자 브라우저에서 실행필수
쿠키·세션 탈취중요
출력값 인코딩매우 중요
CSP, HttpOnly좋음

실기 예제 2

문제: Stored XSS, Reflected XSS, DOM-based XSS의 차이를 설명하시오.

좋은 답안

Stored XSS는 악성 스크립트가 게시글이나 댓글처럼 서버에 저장된 뒤 이를 조회하는 사용자 브라우저에서 실행되는 공격이다. Reflected XSS는 요청 파라미터가 서버 응답에 반사되어 실행되는 공격이며, DOM-based XSS는 클라이언트 측 JavaScript가 외부 입력값을 안전하지 않게 DOM에 삽입하여 발생하는 공격이다.

채점 포인트

요소포함 여부
Stored = 서버 저장필수
Reflected = 요청값 반사필수
DOM-based = 클라이언트 DOM 처리필수
사용자 브라우저 실행중요

실기 예제 3

문제: CSRF의 개념과 대응 방안을 설명하시오.

좋은 답안

CSRF는 사용자가 웹사이트에 로그인된 상태를 악용하여 사용자가 의도하지 않은 요청을 서버에 전송하게 만드는 공격이다. 대응 방안으로는 예측 불가능한 CSRF Token을 생성해 서버에서 검증하고, SameSite 쿠키 설정, Origin/Referer 검증, 중요 기능 재인증, GET 방식의 상태 변경 금지 등을 적용해야 한다.

채점 포인트

요소포함 여부
로그인 상태 악용필수
원치 않는 요청필수
CSRF Token매우 중요
SameSite중요
재인증좋음

실기 예제 4

문제: XSS와 CSRF의 차이를 설명하시오.

좋은 답안

XSS는 웹페이지에 삽입된 악성 스크립트가 사용자 브라우저에서 실행되어 쿠키 탈취, 피싱, 화면 변조 등을 유발하는 공격이다. CSRF는 사용자가 로그인된 상태를 악용하여 사용자가 의도하지 않은 요청을 서버에 전송하게 만드는 공격으로, 핵심 대응은 CSRF Token과 SameSite 쿠키 설정이다.

채점 포인트

요소포함 여부
XSS = 스크립트 실행필수
CSRF = 요청 위조필수
XSS 피해 예시좋음
CSRF 대응 예시좋음

실기 예제 5

문제: 파일 업로드 취약점의 위험과 대응 방안을 설명하시오.

좋은 답안

파일 업로드 취약점은 업로드 파일의 확장자, 내용, 크기, 저장 위치, 실행 권한 등을 검증하지 않아 웹셸이나 악성 파일이 서버에 업로드·실행될 수 있는 취약점이다. 대응 방안으로는 허용 확장자 방식 적용, MIME Type과 파일 시그니처 검증, 파일 크기 제한, 파일명 난수화, 웹 루트 외부 저장, 업로드 디렉터리 실행 권한 제거, 접근통제, 악성코드 검사 등을 적용해야 한다.

채점 포인트

요소포함 여부
파일 검증 미흡필수
웹셸·악성 파일필수
허용 확장자중요
파일 시그니처 검증좋음
저장 경로 분리중요
실행 권한 제거매우 중요

실기 예제 6

문제: 웹셸 업로드를 방지하기 위한 대책을 설명하시오.

좋은 답안

웹셸 업로드를 방지하기 위해 업로드 가능한 확장자를 허용목록 방식으로 제한하고, MIME Type과 파일 시그니처를 함께 검증해야 한다. 또한 업로드 파일은 웹 루트 외부에 저장하고 파일명을 난수화하며, 업로드 디렉터리의 스크립트 실행 권한을 제거하고 악성코드 검사와 접근통제를 적용해야 한다.

채점 포인트

요소포함 여부
허용목록 확장자필수
MIME·시그니처 검증중요
웹 루트 외부 저장필수
실행 권한 제거필수
파일명 난수화좋음
악성코드 검사좋음

핵심 요약

개념한 줄 요약
XSS악성 스크립트가 사용자 브라우저에서 실행되는 공격
Stored XSS악성 스크립트가 서버에 저장되어 실행
Reflected XSS요청값이 응답에 반사되어 실행
DOM-based XSS클라이언트 측 DOM 처리 과정에서 발생
XSS 피해쿠키 탈취, 세션 탈취, 피싱, 화면 변조
출력값 인코딩입력값이 코드가 아니라 문자로 표시되게 처리
CSP허용된 스크립트만 실행하도록 제한
HttpOnlyJavaScript 쿠키 접근 제한
CSRF로그인 상태를 악용해 원치 않는 요청 전송
CSRF Token요청 정당성을 검증하는 예측 불가능한 값
SameSite다른 사이트 요청 시 쿠키 전송 제한
Origin/Referer 검증요청 출처 확인
재인증중요 기능 수행 전 추가 인증
파일 업로드 취약점악성 파일 업로드·실행 가능 취약점
웹셸웹을 통해 서버를 조작할 수 있는 악성 스크립트
허용 확장자필요한 확장자만 업로드 허용
파일 시그니처실제 파일 내용 기반 형식 확인
저장 경로 분리웹 루트 외부 저장
실행 권한 제거업로드 파일의 서버 실행 차단
파일명 난수화경로 조작과 덮어쓰기 방지

필수 암기 문장

아래 문장들은 필기와 실기 모두 중요합니다.

XSS는 웹 애플리케이션이 사용자 입력값을 안전하게 처리하지 않아 악성 스크립트가 사용자 브라우저에서 실행되는 공격이다.

XSS 대응의 핵심은 사용자 입력값을 출력 위치에 맞게 인코딩하여 브라우저가 코드가 아닌 문자로 처리하게 하는 것이다.

Stored XSS는 악성 스크립트가 서버에 저장된 뒤 조회하는 사용자에게 실행되는 공격이고, Reflected XSS는 요청값이 응답에 반사되어 실행되는 공격이다.

DOM-based XSS는 클라이언트 측 JavaScript가 외부 입력값을 안전하지 않게 DOM에 삽입하여 발생한다.

CSP는 허용된 출처의 스크립트만 실행하도록 제한하여 XSS 피해를 완화한다.

HttpOnly 쿠키는 JavaScript의 쿠키 접근을 제한하여 XSS로 인한 세션 쿠키 탈취 위험을 줄인다.

CSRF는 사용자가 로그인된 상태를 악용하여 사용자가 의도하지 않은 요청을 서버에 전송하게 만드는 공격이다.

CSRF 대응을 위해 CSRF Token 검증, SameSite 쿠키 설정, Origin/Referer 검증, 중요 기능 재인증, GET 방식의 상태 변경 금지를 적용해야 한다.

파일 업로드 취약점은 파일 확장자, 내용, 크기, 저장 위치, 실행 권한 등을 검증하지 않아 웹셸이나 악성 파일이 서버에 업로드될 수 있는 취약점이다.

웹셸은 웹 서버에서 실행되어 공격자가 서버 명령 실행, 파일 조작, 내부 정보 조회 등을 수행할 수 있게 하는 악성 스크립트이다.

업로드 파일은 허용 확장자 방식, MIME Type과 파일 시그니처 검증, 파일명 난수화, 웹 루트 외부 저장, 실행 권한 제거, 접근통제, 악성코드 검사를 적용해야 한다.

연습 과제

다음 문제를 풀고 정답 및 해설과 대조한다.

A. 단답형

1. XSS란 무엇인가?
2. XSS의 주요 피해 4가지를 쓰시오.
3. Stored XSS란 무엇인가?
4. Reflected XSS란 무엇인가?
5. DOM-based XSS란 무엇인가?
6. Stored XSS와 Reflected XSS의 차이를 쓰시오.
7. XSS 대응 방안 5가지를 쓰시오.
8. 출력값 인코딩이 XSS 방어에 중요한 이유는 무엇인가?
9. CSP란 무엇인가?
10. HttpOnly 쿠키가 XSS 피해 완화에 도움이 되는 이유는 무엇인가?
11. CSRF란 무엇인가?
12. CSRF가 발생하는 핵심 조건은 무엇인가?
13. CSRF 대응 방안 5가지를 쓰시오.
14. CSRF Token이란 무엇인가?
15. SameSite 쿠키가 CSRF 대응에 도움이 되는 이유는 무엇인가?
16. XSS와 CSRF의 차이를 쓰시오.
17. 파일 업로드 취약점이란 무엇인가?
18. 웹셸이란 무엇인가?
19. 파일 업로드 취약점의 위험 4가지를 쓰시오.
20. 파일 업로드 보안 대책 7가지를 쓰시오.
21. MIME Type만으로 파일 검증을 하면 안 되는 이유는 무엇인가?
22. 업로드 파일을 웹 루트 외부에 저장해야 하는 이유는 무엇인가?
23. 업로드 디렉터리 실행 권한을 제거해야 하는 이유는 무엇인가?

B. 상황 매칭 문제

아래 상황에 적합한 공격 또는 대응책을 쓴다.

24. 게시판 댓글에 삽입된 악성 스크립트가 다른 사용자 조회 시 실행되었다.
25. 조작된 검색 URL을 클릭했더니 검색 결과 페이지에서 스크립트가 실행되었다.
26. 브라우저 JavaScript가 URL 조각 값을 검증 없이 DOM에 삽입했다.
27. 사용자 브라우저에서 쿠키 접근을 제한하고 싶다.
28. 허용된 출처의 스크립트만 실행되도록 제한하고 싶다.
29. 로그인된 사용자가 외부 페이지 접속 후 원치 않는 비밀번호 변경 요청을 보냈다.
30. 상태 변경 요청이 정상 페이지에서 온 것인지 서버에서 검증하고 싶다.
31. 다른 사이트에서 발생한 요청에 세션 쿠키가 자동 전송되는 것을 제한하고 싶다.
32. 이미지 업로드 기능에 서버에서 실행 가능한 악성 스크립트 파일이 업로드되었다.
33. 업로드 파일이 URL로 직접 접근되어 서버에서 실행되었다.
34. 파일 확장자는 이미지처럼 보이지만 실제 내용은 이미지가 아니다.
35. 업로드 파일명에 경로 조작 문자열이 포함되어 있다.

C. 실기형 답안 작성

다음 5문제는 2~3문장으로 답안을 작성한다.

36. XSS의 개념과 대응 방안을 설명하시오.

37. Stored XSS, Reflected XSS, DOM-based XSS의 차이를 설명하시오.

38. CSRF의 개념과 대응 방안을 설명하시오.

39. XSS와 CSRF의 차이를 설명하시오.

40. 파일 업로드 취약점의 위험과 대응 방안을 설명하시오.

보완 학습 및 연습 과제 정답

문맥별 출력 인코딩과 방어 묶음

XSS 방어의 핵심은 출력 위치별로 다른 인코딩을 적용하는 것이다. HTML 본문은 <, >, &, "를 엔티티로 바꾸고, HTML 속성은 따옴표와 공백 처리까지 고려한다. JavaScript 문자열 문맥은 JS 이스케이프를 적용하고, URL 문맥은 URL 인코딩과 허용 스킴 검증을 함께 적용한다.

CSP는 XSS 피해를 줄이는 보조 대책이다. 인라인 스크립트 차단, nonce 또는 hash 기반 허용, 외부 스크립트 출처 제한에 효과가 있지만, 이미 허용된 스크립트의 취약한 DOM 조작이나 정책 오설정까지 해결하지는 못한다.

파일 업로드 방어는 확장자 허용목록, MIME Type 확인, 파일 시그니처 검증, 크기 제한, 파일명 난수화, 웹 루트 외부 저장, 실행 권한 제거, 악성코드 검사, 접근통제를 묶어서 적용한다.

정답 및 해설

A. 단답형 예시 정답: 1 악성 스크립트가 사용자 브라우저에서 실행되는 공격. 2 쿠키 탈취, 세션 탈취, 피싱, 화면 변조. 3 저장형 XSS. 4 반사형 XSS. 5 DOM 처리 과정에서 발생하는 XSS. 6 저장 여부와 실행 경로가 다름. 7 문맥별 인코딩, 입력 검증, CSP, HttpOnly, 안전한 DOM API. 8 코드가 아니라 문자로 처리되게 함. 9 스크립트 실행 출처 제한 정책. 10 쿠키 탈취 완화. 11 로그인 상태를 악용한 위조 요청. 12 자동 쿠키 전송과 상태 변경 요청. 13 CSRF 토큰, SameSite, Origin/Referer, 재인증, GET 변경 금지. 14 예측 불가능한 요청 검증값. 15 교차 사이트 쿠키 전송 제한. 16 XSS는 브라우저 스크립트 실행, CSRF는 요청 위조. 17 악성 파일 업로드·실행 취약점. 18 웹으로 서버를 조작하는 악성 스크립트. 19 명령 실행, 정보 유출, 악성코드 유포, 내부망 공격. 20 허용 확장자, 시그니처, 크기, 파일명 변경, 외부 저장, 실행권한 제거, 검사. 21 조작 가능. 22 직접 실행 차단. 23 서버 실행 방지.

B. 상황 매칭 정답: 24 Stored XSS, 25 Reflected XSS, 26 DOM-based XSS, 27 HttpOnly, 28 CSP, 29 CSRF, 30 CSRF Token 또는 Origin 검증, 31 SameSite, 32 파일 업로드 취약점, 33 저장 경로·실행 권한 문제, 34 파일 시그니처 검증, 35 파일명 난수화와 경로 정규화.

C. 실기형 채점 기준: 핵심 키워드는 문맥별 출력 인코딩, CSP 한계, HttpOnly, CSRF Token, SameSite, Origin/Referer, 파일 시그니처, 웹 루트 외부 저장, 실행 권한 제거이다. 부분점은 개념 25%, 유형 구분 20%, 대응 묶음 40%, 운영상 주의 15%로 부여한다. 입력값 검증만으로 XSS가 해결된다고 쓰거나 MIME Type만 신뢰한다고 쓰면 감점한다.

목차

학습 목표
취약점 전체 지도
XSS
XSS란?
XSS가 발생하는 원리
XSS의 주요 피해
XSS의 종류
Stored XSS
Stored XSS란?
Stored XSS 예시 상황
Reflected XSS
Reflected XSS란?
Reflected XSS 예시 상황
DOM-based XSS
DOM이란?
DOM-based XSS란?
XSS 대응책 전체 지도
출력값 인코딩
출력값 인코딩이란?
문맥별 인코딩
CSP
CSP란?
HttpOnly와 XSS
XSS 실기 답안
문제: XSS의 개념과 대응 방안을 설명하시오.
CSRF
CSRF란?
CSRF 발생 원리
CSRF의 주요 피해
XSS와 CSRF 비교
CSRF 대응책
CSRF Token
SameSite 쿠키
Origin / Referer 검증
중요 기능 재인증
GET으로 상태 변경 금지
CSRF 실기 답안
문제: CSRF의 개념과 대응 방안을 설명하시오.
파일 업로드 취약점
파일 업로드 취약점이란?
파일 업로드가 위험한 이유
웹셸
웹셸이란?
파일 업로드 취약점 발생 원인
파일 업로드 대응책
허용 확장자 방식
MIME Type만 신뢰하면 안 되는 이유
파일 시그니처, 매직넘버 검증
저장 경로 분리
실행 권한 제거
파일명 변경
파일 업로드 실기 답안
문제: 파일 업로드 취약점의 위험과 대응 방안을 설명하시오.
XSS, CSRF, 파일 업로드 비교
로그에서 보는 공격 징후
XSS 의심 로그
CSRF 의심 징후
파일 업로드 의심 로그
내용 연결 정리
시험에 나오는 포인트
필기형 문제풀이
문제 1
문제 2
문제 3
문제 4
문제 5
문제 6
문제 7
문제 8
문제 9
문제 10
문제 11
문제 12
실기형 답안 훈련
실기 예제 1
좋은 답안
채점 포인트
실기 예제 2
좋은 답안
채점 포인트
실기 예제 3
좋은 답안
채점 포인트
실기 예제 4
좋은 답안
채점 포인트
실기 예제 5
좋은 답안
채점 포인트
실기 예제 6
좋은 답안
채점 포인트
핵심 요약
필수 암기 문장
연습 과제
A. 단답형
B. 상황 매칭 문제
C. 실기형 답안 작성
보완 학습 및 연습 과제 정답
문맥별 출력 인코딩과 방어 묶음
정답 및 해설