본문 바로가기
📚Framework & Library

[Library] Axios major version Update (0.x -> 1.x)

by inbeom 2024. 5. 27.
728x90
반응형
Axios 0.x 버전 보안 취약점으로 1.x 버전으로 업데이트 하기

 

 

2023.11.08일에 Axios v0.8.1 ~ v1.5.1 버전에서 XSRF-TOKEN이 X-XSRF-TOKEN 헤더에 포함되어 매 요청마다 보내져 공격자에게 보여질 수 있는 CVE가 공개되었다.

 

위 이슈로 인해 현재 해당 보안 취약점이 해결되었으며, 안정화된 Release 버전인 1.6.4로 업데이트를 진행하였다.

 

Axios XSRF-TOKEN 취약성 업데이트 | DevelopersIO

2023/11/08 일자로 Axios v0.8.1 ~ v1.5.1 버전에서 XSRF-TOKEN이 X-XSRF-TOKEN 헤더에 포함되어 매 요청마다 보내져 공격자에게 보여질 수 있는 CVE가 공개되었습니다. 대응 방법과 일어난 이유 XSRF-TOKEN 이 무엇

dev.classmethod.jp

 

기존 Axios 0.21.1 버전에서 1.6.4 버전으로 업데이트 하는 것은 Major 버전을 올리는 것이기 때문에 기존 소스 코드의 많은 부분을 수정해야 할 수도 있는 상황이라 우선적으로 1.x 버전 업데이트 리뷰나 트러블슈팅, Axios 공식 홈페이지, Github 등을 충분히 리서치하며 현재 프로젝트에 적용했을 때 발생할 수 있는 주요 이슈에 대해 대부분 파악했다.

https://medium.com/@kodegasm.id/semantic-versioning-in-software-engineering-8bc42c61364b

 

Axios 사용 방법

axios 라이브러리를 사용하는 방법은 크게 두가지가 있다. 

1. CDN을 통해 script로 선언하는 방법

가장 많이 사용하는 방법으로 <script> 태그만 추가하면 되므로 매우 간편하게 사용할 수 있고, 빠른 초기 로드 시간과 브라우저 캐싱, 쉬운 업데이트 등의 장점이 있다. 

즉, 빠른 설정과 로드 속도가 중요한 경우, 그리고 최신 버전의 지속적인 업데이트가 필요한 경우 적합하다.

 

 1. npm에서 axios 패키지 다운로드

$ npm install axios

 

 2. script 선언

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

https://axios-http.com/kr/docs/intro

 

2. 파일을 다운로드하여 프로젝트에 삽입하는 방법

이 방법은 현재 프로젝트에서 사용한 방법으로 cdn 서버에 의존성이 없어 독립적이며, 로컬에 파일을 직접 저장하여 사용하기 때문에 보안성 측면에서도 좋을 수 있고 특정 버전의 파일을 사용하므로 버전 관리가 명확하여 업데이트로 인한 이슈 발생을 막을 수 있다는 장점이 있다.

 

Axios Github

https://github.com/axios/axios/releases/tag/v1.6.4

 

Release Release v1.6.4 · axios/axios

Release notes: Bug Fixes security: fixed formToJSON prototype pollution vulnerability; (#6167) (3c0c11c) security: fixed security vulnerability in follow-redirects (#6163) (75af1cd) Contributors ...

github.com

 

위의 Github 링크에서 Source code(zip) 파일을 다운로드 받으면 axios-1.6.4.zip\axios-1.6.4\dist\ 경로에 axios.js 파일과 axios.js.map 파일이 있다. 이 두개의 파일을 프로젝트에 삽입하여 주면된다.

 

src/main/resources/ or ~/webapp/ 해당 경로 밑에 삽입해주고 disk reload 해주면 끝이다.

(삽입 위치는 프로젝트 환경에 따라 변경될 수 있음)

// 이렇게 Axios 함수 바로 사용 가능하다.
axios.get("url")
    .then(function (response) {
         // response  
    }).catch(function (error) {
        // 오류발생시 실행
    }).then(function() {
        // 항상 실행
    });

 


 

 

프로젝트 개발 환경에 따라 다를 수 있지만.. 일단 결과적으로 현재 프로젝트에 적용했을 때 특별히 이슈가 발생하지 않고 정상적으로 동작했다.

 

v.1.0.0-alpha 문서 확인 결과 major version 0.x -> 1.x로 변경하여도 기존 소스코드에 영향 없이 0.x버전의 방식들도 사용할 수 있다고 한다. 

주요 업데이트는 CancleToken, Interceptor, Error, Security 등이 있는 것 같다.

 

 

v1.0.0-alpha.1 · axios axios · Discussion #4761

[1.0.0] - 2022-05-30 Added Added stack trace to AxiosError #4624 Add AxiosError to AxiosStatic #4654 Replaced Rollup as our build runner #4596 Added generic TS types for the exposed toFormData help...

github.com

 

추가됨 (Added)

변경됨 (Changed)

  • 유형 정의 #4665 에서 AxiosError.config를 선택 사항으로 업데이트했습니다.
  • 다른 솔루션보다 URLSearchParam 내장 인터페이스를 강조하는 README가 업데이트되었습니다. #4590
  • CanceledError 인스턴스를 생성할 때 요청 및 구성 포함 #4659
  • 필요에 따라 func-names eslint 규칙을 변경했습니다. #4492
  • substr()이 더 이상 사용되지 않으므로 더 이상 사용되지 않는 substr()을 Slice()로 교체합니다. #4468
  • HTTPS #4387을 사용하도록 README.md의 HTTP 링크 업데이트
  • 더 나은 Trim() 폴리필 #4072 로 업데이트되었습니다.
  • 인스턴스 생성 시 부분 기본 헤더를 지정할 수 있도록 유형이 업데이트되었습니다. #4185
  • 확장된 isAxiosError 유형 #4344
  • axios 인스턴스 메소드에 대한 유형 정의 업데이트 #4224
  • 업데이트된 eslint 구성 #4722
  • 업데이트된 문서 #4742

제거됨 (Removed)

결정된 (Fixed)

  • README #4649 의 문법 수정
  • README #4599 의 코드 오류 수정
  • 취소 확인 코드 최적화 #4587
  • README #4532 에서 defaults.js를 가리키는 URL 수정
  • AxiosPromise #4505 에는 인터페이스 대신 유형 별칭을 사용하세요.
  • 코드 주석의 일부 단어 철자와 린트 스타일 수정 #4500
  • Chrome, FireFox 및 Safari의 업데이트된 브라우저 아이콘 3개로 추가 정보 편집 #4414
  • 1.14.9에서 1.15.0으로의 범프 팔로우 리디렉션 #4673
  • 어설션이 실패할 때 중단되지 않도록 http 테스트 수정 #4435
  • AxiosRequestTransformer #4201 에 대한 TS 정의 수정
  • README #4232 의 문법 문제 수정
  • instance.defaults.headers 유형 #4557 수정
  • 즉시 요청 취소 시 경쟁 조건 수정 #4261
  • 콘텐츠가 없을 때 Z_BUF_ERROR 수정 #4701
  • 리디렉션 회귀 전 프록시 수정 #4708
  • AxiosError 상태 코드 유형 #4717을 수정했습니다.
  • AxiosError 스택 캡처 #4718 수정
  • AxiosRequestHeaders 입력 수정 #4334
  • 최대 본체 길이 기본값 수정 #4731
  • node>v17 #4728 의 FormData Blob 문제를 수정했습니다.
  • 1.5.2에서 1.5.3으로 범프 그런트 #4743
  • 콘텐츠 유형 헤더 반복 수정 #4745
  • http 4738 에 대한 수정된 시간 초과 오류 메시지

보안 (Security)

 

 

- 끝 -

 

728x90
반응형