1. Facts(사실, 객관)
- 프로젝트 csrf 설정
2. Feelings(느낌, 주관)
물론, 이제 웹은 front-end와 back-end가 각각 api를 가지고 통신하는 것이 대세지만, 아쉽게도 현재 유지보수하는 프로젝트는 spring - jsp 입니다. 따라서 적용되는 spring security 방식에도 조금 차이가 있습니다. 이와중에 csrf토큰 설정에 관심을 가졌습니다. 궁금했던 것은, 기존에 왜 common 쪽의 post 요청은 csrf토큰을 전달하지 않을까? 로 시작해서 csrf 토큰 설정을 계획했습니다. 이렇게, 하나씩 프로젝트의 기존 설정들이나 코드들을 분석하고 좋은 방식으로 개선할 수 없는지 둘러보는 재미가 있습니다. 개발 트렌드와는 조금 거리가 멀 수 있지만, jsp에서 csrf 토큰 설정을 확인하며 문제해결의 재미와 개선할 수 있어서 좋았습니다.
3. Findings (배운 점)
ajax로 post 요청을 할 때, 기존에 csrf 토큰을 보내는 방식은 여러개이다.
1. ajax data에 form을 serialize()해서 보내기
2. form 안에 input type hidden으로 csrf 토큰 설정하기
jquery.form.js 플러그인을 사용해서 formData의 한계를 극복하고 Multipart/form-data를 보낼 수 있다. 해당 플러그인이 제공하는 ajaxSubmit()이 있는데, 이를 통해, 낮은 IE버전에도 첨부파일을 ajax로 정상적으로 보낼 수 있다. 이때, data를 명시하지 않기 때문에 1번 방식을 사용할 수 없고, 2번 방식또한 먹히지 않는다. 그래서 파일 업로드 부분에서 csrf 토큰 사용 제외를한 것으로 예상하지만 방법이 있다.
beforeSend : function(xhr) {
xhr.setRequestHeader('X-CSRF-Token',
$('input[name="${_csrf.parameterName}"]').val()
)
}
beforeSend로 csrf 토큰 설정을 할 수 있다. 따라서 post 요청을 하기 전에 header에 토큰 값을 넣어서 전송한다. 이를 통해서 정상적으로 csrf토큰을 이용해서 안전하게 ajax post를 보낼 수 있게 되었다.
4. Affirmation (자기 선언)
- 나는 기존에 시스템의 위험부분을 꼼꼼히 확인하고 개선하는 개발자이다.
'회고' 카테고리의 다른 글
TIL_211111 (0) | 2021.11.12 |
---|---|
TIL_211110 (0) | 2021.11.11 |
TIL_211108 (0) | 2021.11.09 |
TIL_211028 (0) | 2021.10.28 |
TIL_211027 (0) | 2021.10.27 |