기록

[시큐어 코딩] XSS와 CSRF

알리에미친남자 2025. 4. 30. 09:51

XSS (Cross Site Scripting)란?

XSS 는 공격자가 웹 페이지에 **악성 스크립트(JavaScript)**를 삽입하여, 사용자의 브라우저에서 실행되게하는 공격.

<공격 목표>

  • 쿠키/세션 탈취
  • 사용자 계정 도용
  • 악성 사이트로 리디렉션
  • 피싱, 키로깅 등

예시

<input value="<script>alert('XSS!')</script>">

위처럼 삽입된 스크립트는 페이지 로드 시 자동 실행됨.

 

방어 방법

  • 출력 시 이스케이프 처리 (< → &lt;)
  • HTML/JS 분리
  • CSP(Content Security Policy) 설정
  • DOM 조작 시 .innerHTML 대신 .textContent 사용

 

CSRF (Cross Site Request Forgery)란?

CSRF는 공격자가 피해자 브라우저를 이용해, 사용자가 의도하지 않은 요청을 서버로 보내게 하는 공격.

 

<공격 목표>

 

  • 사용자의 권한으로 민감한 요청 보내기
  • 비밀번호 변경, 송금, 탈퇴, 게시물 등록 등

예시

<img src="https://example.com/user/delete?id=123">

 

사용자의 세션을 이용해 서버에 삭제 요청이 자동 전송.

 

방어 방법

 

  • CSRF 토큰 사용 (요청마다 고유 토큰 검증)
  • Referer/Origin 검증
  • SameSite 쿠키 속성 설정 (Lax 또는 Strict)
  • 중요 요청은 GET 대신 POST 사용

 

XSS vs CSRF 차이 비교

항목 XSS CSRF
공격 대상 사용자 (브라우저) 서버 (권한 있는 사용자 세션)
실행 위치 클라이언트 (JS 실행) 서버 (브라우저 요청을 위조함)
쿠키 필요 필요 없음 필요 있음 (세션 활용)
방어 방법 출력 이스케이프, CSP 등 CSRF 토큰, SameSite 등
관계 XSS로 CSRF를 강화할 수도 있음 XSS와 함께 사용되면 더 위험해짐