본문 바로가기

CSRF & XSS

CSRF (Cross-Site Request Forgery)

  • 개요: 사용자가 자신의 의지와 무관하게 신뢰할 수 있는 웹사이트에 원치 않는 요청(HTTP POST, DELETE 등)을 보내도록 하는 공격
  • 공격 대상: 서버
  • 공격 목적: 권한을 도용해 요청 위조
  • 공격 방법: 공격할 서버에 사용자가 로그인한 상태에서, 악의적인 요청을 발생시킬 수 있는 웹 페이지나 이메일 링크를 통해 공격

예시

  1. 사용자가 인터넷 뱅킹을 사용
  2. 그 사이트에 로그인한 상태에서 다른 탭에서 이메일을 통해 공격자가 만든 악성 웹페이지를 방문
  3. 이 페이지에는 사용자의 뱅킹 사이트에 송금 요청을 자동으로 보내는 폼이 숨겨져 있음
  4. 사용자는 모르는 사이에 이 요청을 전송

방어 방법

  1. Referer 체크: HTTP 헤더에 있는 정보로 해당 요청이 요청된 페이지의 정보를 가지고 있음, 그라나 위조 가능
  2. SameSite 쿠키 속성: 쿠키가 같은 사이트의 요청에만 전송되도록 설정하여 사용자를 보호
  3. 사용자 인증 요구: 중요한 요청에 대해 사용자의 비밀번호를 재확인하거나 2단계 인증을 요구
  4. CSRF 토큰 사용: 민감 정보를 다룰 때 미리 토큰을 발행해 요청 검증

XSS (Cross-Site Scripting)

  • 개요: 공격자가 사용자의 브라우저에서 실행될 수 있는 스크립트를 웹 페이지에 삽입하는 공격
  • 공격 대상: 클라이언트
  • 공격 목적: 세션 토큰 또는 다른 중요 정보를 탈취, 웹사이트 변조
  • 공격 방법:
    • Stored XSS: 게시글, 댓글 등에 스크립트 코드 삽입
    • Reflected XSS:악성 스크립트를 포함시킨 URL(쿼리스트링에 포함)을 작성하여 희생자에게 전달

Reflected XSS 예시

  1. 사용자가 웹 사이트의 검색 폼에 "<script>alert('XSS');</script>"와 같은 스크립트를 입력
  2. 이 검색 결과 페이지가 사용자 입력을 검증 없이 그대로 반영하여 보여줄 때 가능
  3. 사용자가 이메일이나 메시지를 통해 받은 링크를 클릭할 때, URL의 파라미터로 "<script>alert('XSS');</script>" 같은 스크립트 포함시킴(http://example.com/search?query=<script>alert('XSS');</script>)
  4. 해당 링크 클릭 시 스크립트가 웹 페이지에서 실행

Stored XSS 예시

  • 사용자가 포럼이나 블로그의 댓글에 "<script>alert('XSS');</script>"와 같은 스크립트를 남김
  • 다른 사용자가 이 댓글이 포함된 페이지를 방문할 때마다 스크립트가 실행되어 세션 토큰이 탈취

방어 방법

  1. 입력 검증: 모든 사용자 입력을 적절히 필터링하여 스크립트 태그 같은 위험 요소를 제거
  2. 출력 검증: 데이터를 HTML로 출력하기 전에 인코딩을 적용하여 스크립트가 실행되지 않도록 함
  3. 콘텐츠 보안 정책(CSP):  웹 페이지에서 실행될 수 있는 스크립트의 소스를 제한

'' 카테고리의 다른 글

웹 기본 인터페이스 - EventTarget, Node, Element, HTMLElement  (0) 2024.07.11
동영상 전송 프로토콜  (1) 2024.05.02
PWA  (0) 2024.05.02
네이티브 앱 & 웹 앱 & 하이브리드 앱  (0) 2024.05.02
CSR/SSR  (0) 2024.04.27