Web
[Web] CSRF & XSS
차가운개발
2024. 11. 28. 15:46
XSS가 사용자가 특정 사이트를 신뢰하기 때문에 발생하는 문제라면 CSRF는 특정 사이트가 사용자를 신뢰하기 때문에 발생하는 문제다.
XSS : 크로스 사이트 스크립트
악의적인 스크립트를 웹 페이지에 삽입하여 사용자의 브라우저에서 실행되도록 하는 공격
웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 발생하며 결과로 사용자는 의도치 않은 동작을 수행하거나 쿠키, 세션 등의 정보를 탈취 당한다
동작 방식
- 공격자가 웹 애플리케이션에 악성 스크립트를 삽입
- 사용자가 해당 웹 페이지를 열면 스크립트가 사용자의 브라우저에서 실행
- 스크립트를 통해 쿠키, 세션, 로컬 데이터 등을 탈취하거나 악성 동작 수행
대응 방법
- 입력값 검증 및 필터링
사용자 입력값에서 스크립트 관련 문자를 필터링 - 출력 시 이스케이프 처리
출력시 HTML, JavaScript, URL에 안전한 형식으로 이스케이프 - Content Security Policy(CSP) 적용
외부 스크립트 실행을 제한 - HTTP Only 쿠키 사용
JavaScript에서 쿠키 접근을 막아 쿠키 탈취 방지 - 신뢰할 수 없는 데이터 직접 삽입 금지
HTML, JavaScript, 속성 값에 사용자 입력값을 직접 삽입하지 않도록 주의
CSRF : 크로스 사이트 요청 변조
사용자가 자신의 의지와는 무관하게 침입자가 의도한 행위를 서버에 요청하게 만드는 공격
공격자가 사용자의 인증 정보를 이용해 피해자의 의지와 상관없이 웹 애플리케이션에서 권한이 필요한 작업을 수행하게 만든다
계좌이체, 비밀번호 변경, 데이터 삭제 등 의도치 않은 작업이 수행된다
동작방식
- 사용자가 특정 사이트에 로그인하여 세션이 활성된 상태
- 공격자가 악의적인 링크나 스크립트를 포함한 페이지를 사용자가 방문하도록 유도
- 사용자가 페이지를 열면 사용자의 인증 쿠키를 이용해 사이트에 요청을 보냄
- 사이트는 요청이 정당한 사용자의 요청으로 보아 처리
대응 방법
- CSRF 토큰 사용
요청마다 고유한 CSRF 토큰을 생성하여 요청과 함께 검증 - Referer 헤더 검사
요청의 출처가 신뢰할 수 있는 도메인인지 확인 - SameSite 쿠키 설정
쿠키가 동일 출처 요청에서만 전송되도록 설정 - 인증된 작업에 대해 재확인
민감한 작업은 비밀번호 재입력 또는 추가 인증 요구
특징 | CSRF | XSS |
공격 대상 | 서버 (사용자의 권한을 악용) | 클라이언트(사용자의 브라우저에서 악성스크립트 실행) |
주요 목표 | 사용자의 권한으로 서버 요청 조작 | 사용자의 데이터 탈취 또는 악성코드 실행 |
공격 방식 | 사용자를 속여 악성 요청 전송 | 웹 페이지에 악성 스크립트 삽입 |
피해 범위 | 서버의 리소스나 데이터 손상 | 사용자 세션, 데이터 탈취 및 악성 동작 수행 |
방어 기법 | CSRF 토큰, SameSite 쿠기, Referer 검사 | 입력값 필터링, CSP, HTTP Only 쿠키 |