XSS와 CSRF의 차이점은 무엇인가요?
XSS(크로스 사이트 스크립팅, Cross-Site Scripting)와 CSRF(크로스 사이트 요청 위조, Cross-Site Request Forgery)는 모두 웹 보안에서 매우 중요한 취약점 유형이지만, 발생 원인과 공격 방식, 피해 결과에서 차이가 있습니다.
아래에서 두 개념을 비교하여 설명하겠습니다.
1. 정의 및 개념 - XSS (크로스 사이트 스크립팅) - 공격자가 웹 애플리케이션 내에 악성 스크립트(주로 자바스크립트)를 삽입하여, 이를 다른 사용자(피해자)가 실행하도록 만드는 공격입니다.
- 주로 사용자 입력값이 충분히 검증 및 필터링 되지 않아 발생합니다.
- 피해자는 악성 스크립트가 삽입된 페이지를 방문했을 때 피해를 입습니다.
- CSRF (크로스 사이트 요청 위조) - 사용자가 이미 인증된 상태(로그인이 된 상태)에서 공격자가 의도한 요청을 사용자의 브라우저가 자신도 모르게 수행하게 만드는 공격입니다.
- 사용자가 자신의 권한으로 공격자가 만든 요청을 실행하여, 피해가 발생합니다.
- 기본적으로 피해자가 특정 공격자가 만든 악의적 웹페이지를 방문하거나 이메일의 링크를 클릭할 때 발생합니다.
2. 공격 방법 및 동작 방식 | 항목 | XSS | CSRF | |-------|-------|-------| | 공격 대상 | 사용자(피해자)의 웹 브라우저에 악성 스크립트 실행 | 정상 사용자의 권한으로 웹 서버에 의도치 않은 요청 전송 | | 공격 방식 | 웹페이지 내에 악성 스크립트 삽입 (예: 게시판, 댓글) 후 실행 | 공격자가 만든 웹사이트 또는 이메일 링크에서 의도된 요청 생성 (GET/POST) | | 발생 위치 | 클라이언트 쪽 (브라우저에서 스크립트 실행) | 서버로 요청이 전송되어 서버에서 처리됨 | | 요구 조건 | 입력값 미검증, 출력 시 필터링 부재 | 사용자가 해당 사이트에 로그인 상태여야 함 | | 피해 예시 | 쿠키 탈취, 세션 하이재킹, 키로깅, 악성 코드 실행 | 계정 설정 변경, 금전 이체, 게시물 작성 등 사용자의 권한 악용 | 3. 피해 및 결과 - XSS의 피해 - 세션 쿠키 탈취로 인한 계정 탈취 - 사용자 정보 유출 - 악성코드 실행 및 피싱사이트로 강제 이동 - 웹사이트 신뢰도 하락 및 사용자 피해 - CSRF의 피해 - 사용자의 권한으로 의도치 않은 요청 처리(예: 비밀번호 변경, 결제 요청) - 피해자가 인지하지 못하는 상태에서 중요한 정보 변경 또는 금전적 피해 - 관리자 계정 탈취나 서버 설정 변경 가능성 4. 방어 및 예방 방법 | 공격 유형 | 주요 방어 기법 | |------------|-----------------| | XSS | 입력값 검증 및 필터링 (인코딩 및 이스케이프)
콘텐츠 보안 정책(CSP) 적용
출력 시 적절한 컨텍스트에 따른 인코딩
HTTPOnly 쿠키 설정 | | CSRF | CSRF 토큰 사용 (인증된 요청에 난수 토큰 포함)
Referer 헤더 검사
SameSite 쿠키 속성 설정
사용자 인증 및 권한 검증 강화 | --- 요약 | 구분 | XSS | CSRF | |--------|----------|----------| | 공격 목표 | 웹사이트 방문자(사용자) | 인증된 정상 사용자 권한으로 웹사이트 | | 공격 방식 | 웹페이지에 악성 스크립트 삽입 및 실행 | 사용자 의지와 무관하게 요청을 보내 서버 동작 유발 | | 발생 원인 | 출력 시 입력값 미검증·필터링 부재 | 인증 상태 요청 시 CSRF 방어 미비 | | 피해 사례 | 세션 탈취, 정보 유출, 악성 스크립트 실행 | 권한 인증 행위 위변조, 데이터 변경 | | 예방책 | 입력값 검증, 출력 인코딩, CSP, HTTPOnly 쿠키 | CSRF 토큰, Referer 체크, SameSite 쿠키 | --- 결론 - XSS는 공격자가 웹사이트 내에 악성 스크립트를 넣어 사용자가 실행하도록 하는 공격으로, 사용자 브라우저에서 직접 악성 행동이 발생합니다.
- CSRF는 인증된 사용자의 권한을 이용해 공격자가 의도한 요청을 서버에 전송하도록 속여서, 사용자가 원하지 않는 동작이 서버에 의해 처리되게 하는 공격입니다.
두 공격 모두 웹 어플리케이션 보안에서 반드시 인지하고 대응해야 하는 중요한 위협입니다.
적절한 입력 검증과 보안 정책 수립을 통해 예방하는 것이 중요합니다.