김종이
Study

14. 웹사이트 보안을 위한 리액트와 웹페이지 보안 이슈

14.1 리액트에서 발생하는 크로스 사이트 스크립팅 XSS

웹 사이트 개발자가 아닌 제 3자가 웹사이트에 악성 스크립트를 삽입해 실행할 수 있는 취약점을 의미


  • dangerouslySetInnerHTML prop

    • dangerouslySetInnerHTML은 오직 __html을 키를 가지고 있는 객채만 인수로 받을 수 있다.
    • 이 인수로 넘겨받은 문자열을 DOM에 그대로 표시하는 역할을 한다. 그러나 위험성은 인수로 받는 문자열에 제한이 없다는 것이다.
  • useRef를 활용한 직접 삽입

  • 리액트에서 XSS 문제를 피하는 방법

    • 제 3자가 삽입할 수 있는 HTML을 안전한 코드로 한 번 치환하는 것이다.
    • 유명한 라이브러리로는 DOMpurity가 있다.

15. 마치며

15.1 리액트 프로젝트를 시작할 때 고려해야 할 사항

  • 유지보수 중인 서비스라면 리액트 버전을 최소 16.8.6에서 17.0.2로 올려둘 것

    • 리액트 16.8에서 훅이 소개되었고, 훅 덕분에 함수형 컴포넌트의 개념이 정립되었다.
    • 리액트 17 버전은 새로운 기능 출시 및 호환성이 깨지는 변경 사항을 최소한으로 맞춘 업데이트
    • 기존 클래스형으로 작성된 컴포넌트를 함수형으로 리팩토링할 필요는 국이 없다.
  • 인터넷 익스플로어 11 지원을 목표한다면 주의해야 될 점

    • 리액트 18 버전부터 인터넷 익스플로어 11을 지원하지 않는다.
    • Next.js는 13 버전부터 익스플로어 11을 지원하지 않는다.
  • 서버 사이드 렌더링 어플리케이션을 우선적으로 고려하자

    • 서버를 준비할 수 있는 충분한 여유가 된다면 서버사이드 렌더링을 고려하는 것이 좋다
  • 상태 관리 라이브러리는 꼭 필요할 때만 사용한다

    • 관리해야 할 상태가 많은 지 여부를 고려해야 한다.
  • 리액트 의존성 라이브러리 설치를 조심한다

    • peerDependencies가 설치하고자 하는 프로젝트의 리액트 버전과 일치하는 지 확인해야 한다.