작성
·
44
0
강의 내용 중에
POST 와 같이 데이터를 변경하는
요청의 경우 csrf 토큰을 생성한다는 내용이 있는데
로그인 페이지 요청시 GET 으로 요청하는데
csrf 토큰이 input 태그에 포함되어 있는 걸로 보아
POST 와 같이 데이터틀 변경하는 요청의 경우
csrf 토큰을 생성하는 게 아니라 csrf 토큰을 검증하는 것이고,
csrf 토큰은 모든 요청에 대해 반환해준다가 맞을까요?
또 csrf 토큰이 난수를 조합해 계속 변경해서
클라이언트에 반환한다고 들었는데
제가 잘못 본 건지 모르겠지만
토큰을 디코딩할 때
난수를 조합하는 코드를 보면
토큰의 길이로 난수를 만드는 것 같은데,
토큰의 길이로 난수를 만든다고 하면
토큰을 변하게 하지 않는 이상
인코딩된 토큰의 결과가 똑같을 것 같거든요.
그래서 세션당 고유 토큰 값은 똑같다고 한다면
로그인 전에는 클라이언트에 반환하는 토큰이
계속 바뀌고 (=익명 사용자 세션이니)
로그인 이후에는 클라이언트에 반환하는 토큰이
일정한 게 아닐까 하는 물음이 생겼습니다.
어느게 맞는 걸까요 ?
답변 2
0
강의를 보시면 GET 방식으로 로그인 페이지를 불러 올때 csrf 토큰을 생성해서 화면의 폼 태크에 포함시킵니다
왜냐하면 로그인 요청을 POST 로 해야 하기 때문에 csrf 토큰이 필요하기 때문입니다.
그리고 토큰이 난수로 인코딩 되어 클라이언트로 전달되는 것은 서버에서 UUID 로 생성한 원본값을 기준으로 생성이 됩니다. 그리고 이것은 세션에 저장이 됩니다.
그래서 클라이언트가 서버로 보내는 토큰은 서버에서 디코딩 되어 세션에 저장된 원본값과 비교합니다.
이런 원리는 암호와 통신에서도 사용되기도 합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
전종복님, 스프링 시큐리티에서의 CSRF 토큰에 대한 질문을 주셨군요. CSRF 토큰 처리 방식에 대해 몇 가지 핵심 포인트를 설명드리겠습니다.
CSRF 토큰 생성 시점과 반환:
GET 요청에서의 CSRF 토큰 포함:
토큰의 난수 생성과 변조 방지:
귀하의 잘못된 부분은 CSRF 토큰 자체가 클라이언트에서 임의 변경되는 것이 아니라는 점입니다. 대신 인증 과정과 요청의 검증을 지원합니다. 스프링 시큐리티는 이를 통해 스크립트 공격이나 무단 요청을 방지합니다.
관련 내용을 더 자세히 살펴보고 싶으시다면, 아래의 추가 질문도 확인해보세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.