Published on

XSS와 CSRF에 대한 이해와 예방

Authors
  • avatar
    Name
    Inhwan Cho
    Twitter

웹 애플리케이션 개발 시 보안은 매우 중요한 고려사항입니다.

특히, XSS(크로스 사이트 스크립팅)와 CSRF(크로스 사이트 요청 위조)는 웹 애플리케이션에서 흔히 발견되는 보안 위협 중 두 가지입니다.

이 글에서는 XSSCSRF의 정의와 각각의 공격 예시, 그리고 이를 방지하기 위한 대책에 대해 자세히 살펴보겠습니다.

XSS (Cross-Site Scripting)

XSS 공격은 공격자가 사용자의 웹 브라우저에 악성 스크립트를 주입하여 실행되게 만드는 공격 방법입니다.

이로 인해 사용자의 세션 토큰, 쿠키 등 민감한 정보가 도난당하거나, 사용자를 대신해서 불법적인 행동을 하게 됩니다.

구분설명
정의공격자가 웹 페이지에 악성 스크립트를 삽입하고, 다른 사용자가 그 페이지를 조회할 때 스크립트가 실행되게 만드는 보안 취약점입니다.
유형1. Stored XSS: 악성 스크립트가 웹 애플리케이션 서버에 저장되어 실행되는 형태
2. Reflected XSS: 사용자의 요청에 바로 스크립트가 반사되어 실행되는 형태
3. DOM-based XSS: 클라이언트 사이드에서 DOM을 조작하여 실행되는 스크립트
예방 방법1. 사용자 입력값에 대한 적절한 검증 및 이스케이프 처리
2. 콘텐츠 보안 정책(CSP) 사용
3. 입력값을 HTML로 렌더링할 때 안전한 라이브러리 사용

CSRF(Cross Site Request Forgery)

CSRF 공격은 공격자가 사용자가 이미 인증된 웹사이트에 사용자를 속여 요청을 보내게 하여, 사용자명의로 원하지 않는 명령이나 변경을 실행하게 만드는 기법입니다.

방지 방법

  1. 요청에 CSRF 토큰을 포함시킵니다. 서버는 요청을 처리하기 전에 이 토큰을 검증합니다.
  2. 쿠키에 SameSite 속성을 설정하여, 다른 사이트의 요청으로부터 쿠키를 보호합니다.
  3. 민감한 작업을 수행하는 요청에는 CAPTCHA 또는 이중 인증을 요구합니다.

비교

공격 유형정의공격 방법주요 방지 방법
XSS사용자의 웹 브라우저에 악성 스크립트를 주입하여 실행사용자 입력을 검증 없이 웹 페이지에 출력데이터 이스케이핑, 안전한 API 사용, CSP 설정
CSRF사용자 명의로 원하지 않는 웹사이트 요청을 보내게 함사용자가 인증된 세션이 있는 사이트에 속임수를 사용하여 요청 전송CSRF 토큰 사용, 쿠키의 SameSite 속성 설정, 이중 인증 요구

보안은 웹 개발의 매우 중요한 부분이며, XSS와 CSRF와 같은 공격으로부터 애플리케이션을 보호하기 위한 조치를 취하는 것이 필수적입니다. 개발자는 이러한 보안 위협을 항상 염두에 두고, 신중하게 코드를 작성할 필요가 있습니다.