아쿠의 개발 일지

XSS와 CSRF: 웹 보안의 주요 위협과 방어 방법 본문

Programming/CS

XSS와 CSRF: 웹 보안의 주요 위협과 방어 방법

디아쿠 2025. 1. 20. 12:11

 

웹 애플리케이션이 발전하면서 다양한 기능이 추가 되었지만, 동시에 보안 위협도 증가하고 있습니다.

그중에서도 특히 XSS(Cross-Site Scripting) 와 CSRF(Cross-Site Request Forgery)는 흔히 발생하는 취약점으로 꼽힙니다. 이번 글에서는 XSS와 CSRF의 작동 원리와 이를 방어하기 위한 방법을 알아보겠습니다.


1. XSS (Cross-Site Scripting)

XSS란?

XSS는 공격자가 악의적인 스크립트를 웹 페이지에 삽입하여, 이를 방문하는 사용자의 브라우저에서 실행되게 만드는 공격입니다. 주로 JavaScript를 활용하며, 사용자의 세션 쿠키를 훔치거나 악성 사이트로 리다이렉트시키는 데 사용됩니다.

XSS의 유형

  1. Stored XSS
    • 공격 스크립트가 데이터베이스에 저장되었다가 페이지를 로드할 때 실행됩니다.
    • 예: 블로그 댓글, 사용자 프로필에 악성 스크립트 삽입.
  2. Reflected XSS
    • 공격 스크립트가 URL 또는 입력 값에 포함되어, 요청과 함께 서버에 전달된 후 브라우저에서 즉시 실행됩니다.
    • 예: 검색 결과 페이지에 입력 값을 그대로 출력하는 경우.
  3. DOM-based XSS
    • 클라이언트 측에서 DOM 조작을 통해 발생하는 공격입니다.
    • 예: JavaScript에서 URL 파라미터를 DOM에 삽입할 때 검증이 부족한 경우.

XSS 방어 방법

  • 입력 검증(Input Validation): 사용자 입력을 철저히 검증하고, 허용된 값만 처리합니다.
  • 출력 인코딩(Output Encoding): HTML, JavaScript, URL 등에 적합한 인코딩을 사용하여 스크립트 실행을 방지합니다.
  • Content Security Policy (CSP): 브라우저가 특정 소스에서만 스크립트를 실행하도록 제한합니다.
  • HTTPOnly 쿠키: JavaScript에서 쿠키 접근을 차단하여 세션 탈취를 막습니다.

2. CSRF (Cross-Site Request Forgery)

CSRF란?

CSRF는 사용자가 신뢰하는 사이트를 대상으로 공격자가 악의적인 요청을 위조하여 서버가 이를 처리하게 만드는 공격입니다. 사용자가 인증된 상태를 악용하여 비정상적인 동작을 수행합니다.

CSRF의 작동 방식

  1. 사용자가 웹사이트에 로그인한 상태에서 인증 쿠키가 브라우저에 저장됩니다.
  2. 공격자가 악의적인 링크나 폼을 통해 사용자를 속여 요청을 보냅니다.
  3. 브라우저는 자동으로 인증 쿠키를 포함하여 요청을 전송합니다.
  4. 서버는 요청이 사용자의 의도인지 확인하지 않고 처리합니다.

CSRF 공격 예제

  • 사용자가 공격자의 이메일에 포함된 링크를 클릭하여, 자신의 계좌에서 공격자의 계좌로 돈을 송금하는 경우.
  • 공격자가 조작한 HTML 폼을 사용하여, 사용자의 계정 설정을 변경하는 경우.

CSRF 방어 방법

  • CSRF 토큰 사용: 서버가 클라이언트에게 CSRF 방지 토큰을 제공하고, 요청 시 이를 검증합니다.
  • Referer 헤더 검증: 요청이 올바른 출처에서 왔는지 확인합니다.
  • SameSite 쿠키 속성: 쿠키가 동일한 출처에서만 사용되도록 설정합니다.
    • SameSite=Strict 또는 SameSite=Lax로 설정.
  • 사용자 확인: 중요한 작업(예: 계좌 송금) 전에 추가 인증(예: 비밀번호 재입력)을 요구합니다.

3. XSS와 CSRF의 차이점

대상 사용자 서버
공격 방법 악성 스크립트를 브라우저에서 실행 신뢰된 사용자의 권한을 악용
피해 범위 사용자 데이터 탈취, 계정 하이재킹 서버에 비정상적인 요청 수행
방어 방법 입력 검증, CSP, HTTPOnly 쿠키 CSRF 토큰, Referer 검증, SameSite 쿠키

 


XSS와 CSRF는 각각 사용자와 서버를 대상으로 하는 대표적은 웹 보안 취약점입니다. 두 공격 모두 예방하려면 철저한 입력 검증, 적절한 보안 헤더 설정, 추가 인증 절차 등을 통해 방어해야 합니다.

보안은 개발 초기부터 설계에 포함되어야 하며, 지속적인 점검과 테스트를 통해 강화할 수 있습니다.

 

728x90