XSS와 CSRF

허정·2022년 6월 16일

추가로 API Req를 제한하는 방법에 대해서 알아봅시다. API Req가 자주 올때 제한하는 것을 구현하는 방법을 말하는 것입니다.

1. XSS, CSRF

보안 문제입니다. 그래서 시큐어 코딩을 고려해야 합니다.

(1) HTTP 통신

웹 통신이 HTTP 통신이기 때문에, Stateless 합니다. 그래서 클라이언트 단에서는 사용자를 기억하기 위해서 쿠키를 사용합니다.

(2) JS 파일은 WAS에 있어야 합니다

  • 해커가 게시판에 글을 작성했습니다.
  • 이 글에 JS를 삽입해서 집어넣어버립니다. 해당 웹 서비스에 원래 있던 JS 파일이 아닌데, 게시물을 작성하면서 올라가버렸고 심지어 제 3자가 읽었을 때 작동까지 한다고 가정해봅시다.
  • 클라이언트 단의 쿠키를 유출하는 등의 코드를 집어넣으면 악성코드가 되어버립니다. Alice가 이 글을 읽어버린다면, Alice 쪽에서 스크립트가 작동해버립니다.
  • 해결하는 방법은 하나입니다. 글을 작성하는 것은 서버 개발자 입장에서 본다면 사용자의 Input입니다. 이것을 어떻게 대응하라고 하는 가이드가 있습니다. 그것이 "시큐어 코딩 가이드"입니다. 핵심은 "입력 데이터 검증"입니다.
  • CSRF는 XSS의 연장선에 있습니다.

(3) 시큐어 코딩 가이드 - 안전한 코딩 기법

https://www.kisa.or.kr/2060204/form?postSeq=6&page=1

  • 일반적인 경우에는 사용자가 문자열에 스크립트를 삽입하여 실행하는 것을 막기 위해 사용자가 입력한 문자열에서 <,>,&,"," 등을 replace 등의 문자 변환 함수나 메소드를 사용하여 &​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​lt, &​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​amp, &​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​quot로 치환합니다.
  • HTML 태그를 허용하는 게시판에서는 게시판에서 지원하는 HTML 태그의 리스트(White List)를 선정한 후, 해당 태그만 허용하는 방식을 적용합니다.
  • 보안성이 검증되어 있는 API를 사용하여 위험한 문자열을 제거합니다.

(4) 사용자의 Input을 믿지 마라

  • Input이 SQL문이면, SQL Injection Attack
  • Input이 운영체제 명령이면, OS Command Injection Attack
  • Input이 JS이면, XSS Attack

0개의 댓글