길잃은곰
길을 잃어 떠도는 곰
길잃은곰
전체 방문자
오늘
어제
  • 분류 전체보기 (87)
    • Algorithm (6)
    • HTML, CSS (9)
    • Frontend (1)
    • SW공학 (1)
    • WEB (4)
    • Javascript (29)
    • Typescript (0)
    • React (8)
    • Computer Science (11)
    • NEWS (0)
    • TIL(WIL) (4)
    • ETC (5)

블로그 메뉴

  • ✨깃허브
  • 홈
  • 태그
  • 방명록

인기 글

태그

  • Es5
  • Pixel
  • VH
  • ES7
  • JavaScript
  • root-element
  • 코테
  • REM
  • 코드트리
  • ES8
  • %
  • VW
  • 연탄
  • javascript2016
  • element
  • PX
  • 자바스크립트
  • js2016
  • EM
  • ES6
hELLO · Designed By 정상우.
길잃은곰

길을 잃어 떠도는 곰

WEB

[ React ] XSS, CSRF 공격이란

2023. 1. 19. 15:38

XSS (Cross Site Scripting)

  • XSS는 웹사이트 취약점 공격의 일종으로, 사용자가 입력한 내용이 웹사이트에 그대로 반영되는 취약점을 이용하여 악의적인 스크립트를 삽입하는 공격입니다.
  • XSS 공격에는 크게 Stored XSS와 Reflected XSS 그리고 DOM-based XSS가 있습니다.

XSS 공격의 종류

  • Stored XSS -- 저장형 XSS
    • XSS 취약점이 있는 웹 서버에 악성 스크립트를 입력해두고 방문자가 해당 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식이다. 일명 저장 방식이다.
  • Reflected XSS -- 반사형 XSS
    • 특정 파라미터 값을 통해서 공격하는 방식으로 검색, 에러메시지, URL 등 사용자로부터 입력한 값을 받아 브라우저에게 응답할 때 전송되는 방법이다.
  • DOM-based XSS -- DOM 기반 XSS
    • Document Object Model의 약자로 DOM 객체를 포함하는 자바스크립트 등을 이용하여 데이터 접근 시 검증되지 않은 입력값이 자바스크립트를 통해 삽입되어 발생하는 취약점을 이용하는 방식으로 URL을 통해 사용자를 공격한다.

XSS 공격 방법

  1. Script 태그를 이용한 XSS 공격 : script 태그를 이용하여 XSS 공격을 수행합니다.
<script> alert("XSS"); </script>
  1. javascript URL을 이용한 XSS 공격 : javascript URL을 이용하여 XSS 공격을 수행합니다.
<a href="javascript:alert('XSS');">XSS</a>
  1. onerror 이벤트를 이용한 XSS 공격 : 이미지가 로드되지 않을 때 발생하는 onerror 이벤트를 이용하여 XSS 공격을 수행합니다.
<img src="http://example.com/404.png" onerror="alert('XSS');" />
  1. 블랙리스트 우회를 이용한 XSS 공격 : 블랙리스트에 있는 태그를 우회하여 XSS 공격을 수행합니다.
<ruby
     src="http://example.com/404.png"
     onerror="alert(String.fromCharCode(88,83,83));"
   />
  1. 난독화를 이용한 XSS 공격 : 난독화를 이용하여 XSS 공격을 수행합니다.
<a href="&#x6A;&#x61;&#x76;&#x61;&#x73;&#xA;&#x63;&#
x72;&#x69;&#x70;&#x74;&#xA;&#x3A;&#xA;&#x61;&#x6C;&#x65;&#x72;&#x74;
&#xA;&#x28;&#x27;&#x58;&#x53;&#x53;&#x27;&#x29;">XSS</a>

XSS 공격 방어

  1. 입력값 검증
    • 사용자의 입력값을 검증하여 XSS 공격을 방어합니다.
    • 입력값을 검증할 때는 블랙리스트 방식과 화이트리스트 방식이 있습니다.
      • 블랙리스트 방식 : 특정 문자를 제거하는 방식입니다.
      • 화이트리스트 방식 : 특정 문자만 허용하는 방식입니다.
    • 현업에서는 화이트리스트 방식을 사용합니다. (블랙리스트 우회를 이용한 XSS 공격을 방어하기 위함)
  2. HTTPOnly 쿠키 설정
    • HTTPOnly 쿠키는 자바스크립트에서 접근할 수 없는 쿠키입니다.
    • HTTPOnly 쿠키를 사용하면 XSS 공격을 방어할 수 있습니다.
  3. Content Security Policy (CSP) - 콘텐츠 보안 정책
    • CSP는 웹 페이지에서 로드할 수 있는 리소스의 종류를 제한하는 보안 방식입니다.

CSRF (Cross Site Request Forgery)

  • CSRF는 웹사이트 취약점 공격의 일종으로, 사용자가 의도하지 않은 요청을 웹사이트에 전송하는 공격입니다.
  • CSRF 공격은 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 하게 만드는 공격입니다.

CSRF 공격의 예시

  • CSRF 공격은 다음과 같은 예시로 설명할 수 있습니다.
  • 공격자는 다음과 같은 코드를 작성합니다.
  <form action="http://example.com/transfer" method="POST">
    <input type="hidden" name="account" value="1234567890" />
    <input type="hidden" name="amount" value="1000000" />
    <input type="submit" value="송금하기" />
  </form>
  • 공격자는 위의 코드를 웹사이트에 삽입합니다.
  • 사용자는 공격자가 삽입한 코드를 클릭합니다. (사용자가 의도하지 않은 요청)
  • 사용자는 자신의 의지와는 무관하게 공격자가 의도한 행위를 하게 됩니다. (계좌에 100만원이 송금됨)

CSRF 방어 방법

  • CSRF 공격을 방어하기 위해서는 다음과 같은 방법을 사용할 수 있습니다.
  • Referer 검증 : 요청을 보낸 웹사이트의 주소를 검증합니다.
    • HTTP Referer 헤더는 요청을 보낸 웹사이트의 주소를 포함하고 있습니다.
    • Referer 헤더를 검증하여 요청을 보낸 웹사이트의 주소를 확인할 수 있습니다.
    • 하지만, 해당 정보는 ZAP 등의 툴을 사용하면 쉽게 확인할 수 있기 때문에, Referer 헤더를 검증하는 것은 취약점 공격에 취약합니다.
  • CSRF 토큰 : 요청을 보낼 때 CSRF 토큰을 같이 보내고, 서버에서 CSRF 토큰을 검증합니다.
    • 서버에서 hash 로 암호화한 CSRF 토큰을 생성합니다. (ex. SHA-256)
    • 사용자는 매번 요청을 보낼 때마다 CSRF 토큰을 같이 보냅니다.
  • GET/POST 요청 구분하기 : GET/POST 방식을 구분하여 요청을 보냅니다.
    • GET 방식은 CSRF 공격에 취약하기 때문에 img 태그는 GET 방식으로 요청을 보내고, form 태그는 POST 방식으로 요청을 보냅니다.
    • 참고로 필자는 스터디 때 GET/POST 방식의 차이를 발표한적이 있었는데, 그 때는 왜 이 2개를 구분하는지에 대해서는 잘 모르고 있었습니다. 그래서 이번에 CSRF 공격에 대해서 공부하면서 GET/POST 방식을 구분하는 이유를 알게 되었습니다. (GET 방식은 CSRF 공격에 취약하기 때문에)
  • 추가 인증 : CAPTCHA, OTP 등을 사용하여 추가 인증을 요구합니다.
    • 사용자가 인증을 완료해야만 요청을 보낼 수 있습니다.
Reference
  • Cross Site Scripting(XSS) 이란
  • What is XSS
  • csrf 공격
  • CSRF 공격 방어 방법
 
저작자표시 비영리 동일조건 (새창열림)

'WEB' 카테고리의 다른 글

[ Web ] WebPack, Bable, Polyfill  (0) 2023.01.18
[ Web ] 검색 엔진 그리고 검색 엔진 최적화 ( SEO )  (0) 2023.01.18
[ Web ] REST API  (0) 2023.01.18
    'WEB' 카테고리의 다른 글
    • [ Web ] WebPack, Bable, Polyfill
    • [ Web ] 검색 엔진 그리고 검색 엔진 최적화 ( SEO )
    • [ Web ] REST API
    길잃은곰
    길잃은곰

    티스토리툴바