XSS와 CSRF 차이점 및 대응 방안

Haizel·2023년 5월 22일
1
post-thumbnail

1. XSS(Cross-site Scripting) : 크로스 사이트 스크립트


웹사이트에서 의도치 않은 스크립트를 넣어서 실행시키는 기법을 말합니다.

웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 발생하며, 결과로 사용자는 의도치 않은 동작을 수행하거나 쿠키, 세션 등의 정보를 탈취 당하게 됩니다.

  1. Prepetrator(제 3의 침입자)는 사이트의 취약점을 찾습니다.
  2. 취약점을 찾아 세션 쿠키를 탈취하는 스크립트를 사이트에 삽입합니다.
  3. 사용자가 웹 사이트에 접근할때 마다 스크립트는 작동되고,
  4. 작동된 스크립트를 통해 사용자의 세션 쿠키를 탈취합니다.

대응 방안

  1. 중요 정보(e.g. 개인 정보 등)는 쿠키 대신 서버에 저장한다.
  2. 정보를 암호화한다.
  3. httpOnly 옵션을 설정한다 (document.cookie를 이용해 쿠키에 직접 접근하는 것을 방지)
  4. Url encoding이나 문자열을 치환한다.

2. CSRF(Cross-Site Request Fogery) 크로스 사이트 요청 변조


사용자가 자신의 의지와는 무관하게 침입자가 의도한 행위를 서버에 요청하게 만드는 공격입니다.

XSS가 사용자가 특정 사이트를 신뢰하기 때문에 발생하는 문제라면, CSRF는 특정 사이트가 사용자를 신뢰 하기 때문에 발생하는 문제입니다.

  1. 침입자는 서버로 넘어가는 자금 전송에 대한 요청을 조작하려고 합니다.
  2. 침입자는 하이퍼링크에 자금 전송 요청에 대한 스크립트를 삽입하고 사이트에 로그인할 사람들에게 전송합니다.
  3. 사용자가 링크를 누르면, 의도치않게 서버로 자금 전송 요청을 보내게 됩니다.
  4. 서버는 로그인된 사용자의 요청이기 때문에 정상적으로 인식하고 전송을 실행하여 침입자에게 돈이 송금됩니다.

💡 CSRF의 2가지 조건
1. 사용자가 사이트에 로그인 상태여야 한다.
2. 사용자는 조작된 페이지에 방문(접속)해야 한다.


대응 방안

  1. 요청 헤더(Request header)의 도메인과 일치하는지 refferer 속성 검증
    • 같은 도메인에서의 요청이 아니라면 차단한다.
  2. CSRF Token 사용
    • 랜덤한 UUID와 같은 임의의 난수를 세션에 저장해두고 해당 난수가 전달되지 않으면 요청을 거부
  3. Security Token 사용
    • 사용자 세션에 암호화된 값을 저장하고 사용자의 요청마다 해당 암호화된 값을 포함시켜 전송
    • 이후 서버에서 요청을 받을 때마다 세션에 저장된 토큰 값과 요청에 전달되는 토큰 값이 일치하는지 확인
  4. CAPTCHA

3. XSS 와 CSRF 비교


  1. XSS가 사용자가 특정 사이트를 신뢰하기 때문에 발생하는 문제라면, CSRF는 특정 사이트가 사용자를 신뢰 하기 때문에 발생하는 문제이다.
  2. XSS는 클라이언트의 브라우저에서 발생하는 문제이고, CSRF는 서버에서 발생하는 문제이다.
  3. XSS는 사용자의 쿠키를 탈취할 수 있고, CSRF는 서버로부터 권한을 탈취할 수 있다.
XSSCSRF
방법악성 스크립트가 클라이언트에서 실행권한을 도용당한 클라이언트가 가짜 요청을 서버에 전송
원인사용자가 특정 사이트를 신뢰특정 사이트가 사용자를 신뢰
공격대상클라이언트서버
목적쿠키, 세션 갈취, 웹사이트 변조권한 도용


📎 참고문서

profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글