XSS CSRF

JWJ·2025년 3월 27일

면접 준비

목록 보기
3/4
post-thumbnail

XSS

XSS는 웹 게시판이나 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입해 개발자가 고려하지 않은 기능이 작동하게 하는 공격이다. 주로 사용자의 로그인 상태를 기록하기 위해, 쿠키나 로컬 스토리지에 정보를 저장하는데, 이를 가져올 수 있다.

XSS 절차

  • 해커가 웹사이트의 게시판에 악의적인 스크립트를 삽입

  • 사용자가 해커의 스크립트가 삽입된 게시판을 읽음

  • 사용자의 정보가 해커로 유출됨

XSS 해결방법

  1. 만약에 쿠키에 정보를 저장한다면 HttpOnly를 설정한다. (xss에는 방어가 완벽하게 되지만, csrf에 취약해짐)

  2. 근본적으로 xss 공격은 입력값에 대한 검증이 제대로 이루어지지 않아 발생하는 취약점이다. 따라서 사용자의 모든 입력값에 대하여 필터링을 해주어야 한다. ex) <, >, ", '등 주로 스크립트를 실행하기 위한 특수문자를 필터링 한다.

CSRF

CSRF는 사용자의 권한을 악용하여 공격자가 원하지 않는 요청을 보내는 것이다. 구체적으로 로그인된 사용자를 공격자가 의도한 행위 특정 웹사이트에 요청하게 한다.

CSRF 3가지 조건

CSRF가 성공하려면, 아래 3가지 조건이 만족되어야 한다.
1. 사용자는 보안이 취약한 서버로부터 이미 로그인되어 있는 상태여야 한다.
2. 쿠키 기반의 서버 세션 정보를 획득할 수 있어야 한다.
3. 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 한다. (사용자 패스워드 변경은 어떤 URI와 메소드를 사용하는지)

CSRF 절차

  • 사용자는 웹 사이트에 로그인을 한다.

  • 로그인이 성공하면 (로그인 관리 방식이 세션이라는 가정하에) 사용자의 브라우저에 쿠키 정보가 저장된다.

  • 공격자의 피싱 메일 혹은 악성 스크립트가 작성된 페이지 링크를 열람 한다면, 악성 페이지에 이동하게 된다.

  • 악성 사이트에서 특정 웹 사이트에 사용자의 쿠키 정보를 가지고 위조된 요청 정보를 전송한다.

  • 이로 인해 사용자는 패스워드 변경 등과 같은 의도하지 않은 행동을 수행하게 된다.

CSRF 방지

가장 단순한 방법은 JWT 토큰을 사용하는 것이다. 로그인을 성공하면 사용자에게 JWT 토큰을 발급하고, 해당 토큰을 쿠키가 아닌, 로컬 스토리지에 저장하면 CSRF를 방지할 수 있다. 하지만 XSS 공격에 토큰이 탈취당할 수 있다. 따라서 토큰을 발급할 때 ACCESS, REFRESH 두 중류의 토큰을 발급한다.

🗒️REF

https://devscb.tistory.com/123

profile
인사이트를 얻고 정리하는 공간입니다

0개의 댓글