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 0.21.1 버전에서 1.6.4 버전으로 업데이트 하는 것은 Major 버전을 올리는 것이기 때문에 기존 소스 코드의 많은 부분을 수정해야 할 수도 있는 상황이라 우선적으로 1.x 버전 업데이트 리뷰나 트러블슈팅, Axios 공식 홈페이지, Github 등을 충분히 리서치하며 현재 프로젝트에 적용했을 때 발생할 수 있는 주요 이슈에 대해 대부분 파악했다.
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
위의 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 등이 있는 것 같다.
추가됨 (Added)
- AxiosError #4624 에 스택 추적을 추가했습니다.
- AxiosStatic #4654 에 AxiosError 추가
- 빌드 실행기로 Rollup을 대체했습니다 #4596
- 노출된 toFormData 도우미에 대한 일반 TS 유형을 추가했습니다. #4668
- 수신 콜백 함수 #4096을 추가했습니다.
- PNPM #4207을 사용한 설치 지침이 추가되었습니다.
- AbortController 폴리필 #4229 가져오기를 방지하기 위해 일반 AxiosAbortSignal TS 인터페이스를 추가했습니다.
- ECOSYSTEM.md #4238 에 axios-url-template을 추가했습니다.
- 사용자가 모든 인터셉터가 axios 인스턴스 #4248 에서 제거되었는지 확인할 수 있도록 요청 및 응답 인터셉터 객체에clear() 함수를 추가했습니다.
- 반응 후크 플러그인 #4319를 추가했습니다.
- 변환 응답 #4580 에 대한 HTTP 상태 코드 추가
- 브라우저에서 지원하는 프로토콜 목록에 blob을 추가했습니다. #4678
- 리디렉션 #4436 에서 환경에서 프록시 확인
- 추가 옵션 4704를 사용하여 향상된 toFormData 구현을 추가했습니다.
- 취소기 매개변수 구성 및 요청 추가 #4711
- application/x-www-form-urlencoded #4714 에 자동 페이로드 직렬화를 추가했습니다.
- 웹팩 사용자가 내장 기능을 덮어쓸 수 있는 기능 추가 #4715
- AxiosRequestHeaders 유형 #4322 에 string[]을 추가했습니다.
- formSerializer 구성 #4721을 준수하기 위해 url-encoded-form 직렬 변환기에 대한 기능을 추가했습니다.
- isCancel 유형 어설션 #4293을 추가했습니다.
- node.js #4725 에 대한 데이터 URL 지원이 추가되었습니다.
- 진행 이벤트 콜백 유형 추가 #4675
- URL 매개변수 직렬 변환기 #4734
- axios.formToJSON 메서드 #4735를 추가했습니다.
변경됨 (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)
- NetworkError 생성자 #4656 에 대한 잘못된 인수가 제거되었습니다.
- 웹팩 #4596 제거됨
- 인수를 배열 #4544 로 변환하는 함수가 제거되었습니다 .
결정된 (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)
- SECURITY.md #4687 업데이트
- 끝 -