211230 Redux 보안

Redux

Rules of Reducers

  • state와 action을 통해서만 새로운 state가 계산되어야 함
  • state는 불변성을 지키면서 업데이트해야함.
  • 순수 함수 여야 함. random이나, asycLogic 등 side effects를 발생시키지 말아야 함.

이렇게 해야하는 이유?

  • state 와 action만으로 새로운 상태가 나오기 때문에 예측하기 쉽고, test 하기 쉽다.
  • 그렇지 않다면 어떻게 동작하는지 어떤 결과를 리턴하는지 알 수 없게 된다.
  • Redux가 올바르게 동작하지 못하게 하여서 bug를 유발한다.

Redux Toolkit에 createSlice 는 내부적으로 immer 라이브러리를 사용하여 immutable 하게 업데이트 하는 작업을 편하게 해준다. immerstateProxy 객체로 감싸고 변경사항이 있을대 비교하여 immutablestate 를 반환할수 있게 해준다.

→ 내부적으로 immer 를 사용하는 createSlicecreateReducer 를 사용하지 않는다면 immutable 하게 객체를 업데이트해야 한다.

Writing Async Logic with Thunks

RTK 는 내부적으로 redux-thunk 를 포함한다. createAsyncThunk 를 사용하면 Thunk를 쉽게 생성할 수 있다.

보안

  • Local Storage 정보는 XSS Attack 으로 도난 당할 수 있다.

XSS Attack 이란?

(Cross-Site Scripting Attack)

  • injection 관련 보안 이슈
  • 사용자가 신뢰하는 웹사이트에 스크립트를 주입해서 정보를 빼내거나 의도치 않은 작업을 하는 것, 웹 어플리케이션, 통상적으로 form 안에 input을 통해서 주입한다.
  • 헤커가 자바스크립트를 준비해서 웹사이트에 숨겨 놓는다.
  • 사용자가 이용하다가 숨겨진 스크립트에 의해 쿠키나 localStorage에 정보를 attacker 에게 전달할수 있다.
  • 민감한 정보를 localStorage에 저장하면 안됨..
  • 해결 방법
    • 메모리 상의 저장 → 브라우저 나가면 로그인 유지 되지 않는다거나 사용자 경험이 떨어짐
    • 쿠키를 사용하는데, http only 옵션을 넣어줌.→ 브라우저만 쿠키 정보를 읽을 수 있도록 함. 자바스크립트로 읽을 수 없게함. 만료 기간을 설정하면 만료 전까진 쿠키에 유지 됨.
      • 모바일 클라이언트엔 적용할 수 없음.
      • CSRF attack에는 취약함.
  • 서버에서는 cors 에 creadentials를 true (Access-Control-Allow-Credentials)로 설정하고 http only로 쿠키를 보내주어야 한다.
  • 헤더에 cookie로 넣어버리면? 모바일 클라이언트는 문제가 생김, 일단은 그대로 바디로 token을 넘겨주기도 하고, header로 설정하기도 해야 함.
  • 서버에 auth 부분에서는 Cookie 도 확인하고 Header도 확인해야 함. 모바일 클라이언트도 있기 때문에