개발 무지렁이

[Spring Boot] 쿠키(Cookie)와 세션(Session), CSRF 본문

Backend/스프링부트

[Spring Boot] 쿠키(Cookie)와 세션(Session), CSRF

Gaejirang-e 2022. 11. 26. 11:12

쿠키 🍘


❗ 접속하는 사람에 따라 다른 페이지를 보여주고 싶다
-> 사용자를 구별하고 싶다

❗ 웹서버는 기억력이 없다
-> 클라이언트 최초 접속 시, 서버가 쿠키 🍘 발행 (커피 도장 쿠폰 ☕)

세션


❗ 클라이언트가 쿠키 🍘를 조작하면 어쩌지?
-> 서버의 세션저장소에 클라이언트별로 공간 생성 (= 세션 Session)
-> 이 공간에 정보 저장
-> 쿠키 🍘에는 세션ID가 들어있다 (JSESSIOINID)

❗ 클라이언트가 세션ID를 조작하면?
-> 규칙이 없게 길게 만들면 된다.

ex.
세션저장

@GetMapping("/saveSession/{name}/{value}")
@ResponseBody
public String saveSession(@PathVariable String name, @PathVariable String value, HttpServletRequest req) {
    HttpSession session = req.getSession(); // JSESSIONID in 쿠키 in 웹브라우저
    session.setAttribute(name, value);
    return "세션변수 %s의 값이 %s(으)로 설정되었습니다.".formatted(name, value);
}

세션가져오기

@GetMapping("/getSession/{name}")
@ResponseBody
public String saveSession(@PathVariable String name, HttpServletRequest req) {
    HttpSession session = req.getSession(); // JSESSIONID in 쿠키 in 웹브라우저
    String value = (String)session.getAttribute(name);
    return "세션변수 %s의 값이 %s입니다".formatted(name, value);
}

CSRF(Cross Site Request Forgery)


위조된 요청을 보내는 공격을 말한다
CSRF 토큰
: 내부에서 발생한 요청임을 체크하는 수단
: '스프링 시큐리티'가 'CSRF 토큰 값'을 '세션'을 통해 발행하고
  폼 전송 시 해당 토큰을 전송해서, 실제 웹페이지에서 작성된 데이터인지를 검증(구별)한다.
Comments