분류 전체보기

    XSS란 무엇이며 어떻게 방어할 수 있을까?

    🔍 XSS란 무엇인가? 크로스 사이트 스크립팅(Cross-Site Scripting, 이하 XSS)은 웹 보안 취약점 중 하나로, 공격자가 사용자의 웹 브라우저에 악의적인 스크립트를 주입할 수 있게 하는 공격 방식입니다. 이 취약점은 웹 애플리케이션에서 사용자 입력을 적절히 검증하거나 이스케이프 처리하지 않을 때 발생합니다. XSS 공격은 사용자의 세션 토큰, 쿠키, 개인 정보 등을 탈취하거나 사용자를 대신하여 특정 행위를 수행하게 만드는 등 다양한 형태로 이루어질 수 있습니다. 🔍 XSS는 왜 등장했는가? XSS 취약점은 웹 애플리케이션의 발전과 함께 등장했습니다. 초기 웹 사이트들은 주로 정적인 정보를 제공하는 데 초점을 맞췄지만, 시간이 지나면서 사용자 상호작용과 개인화된 콘텐츠의 필요성이 증가했습..

    디자인패턴을 이용한 장바구니 기능 구현 - 레디스와 스프링부트 활용

    이커머스 프로젝트를 진행하면서 장바구니 기능에 추가 요구사항이 생겨 리팩토링 하는 과정을 기록합니다. 이번 리팩토링을 위해 전략 패턴과 팩토리 메소드를 사용하였습니다. 팩토리 메서드 패턴은 객체 생성을 위한 패턴으로, 객체를 생성하는 역할을 서브클래스에 위임하여 유연성을 제공합니다. 전략 패턴은 행위를 캡슐화하고 런타임에 행위를 변경할 수 있는 패턴입니다. 이 패턴은 애플리케이션의 일부를 동적으로 교체하고 다양한 전략을 적용할 수 있도록 도와줍니다. 기존 로직 Redis 저장소에 제품을 저장하는 기존 로직을 살펴보겠습니다. @Service class BasketItemService( ... ) { fun addBasketItem(basketItemRequest: BasketItemRequest) { //..

    스프링 세션 적용하기 (feat. filter)

    🔍 Session 정보 이용하기 ✏️ 1. 컨트롤러에서 HttpSession 클래스 이용하기 HttpSession 클래스를 파라미터로 받으면 session 정보를 사용할 수 있다. ✏️ 2. 필터 또는 인터셉터 이용하기 필자는 세션 정보를 거의 모든 요청 API에서 확인해야 한다. 따라서 Controller에서 session 정보를 불러오는 중복을 해결하기 위해 필터를 이용하였다. @Component class SessionFilter( private val redisSessionRepository: RedisSessionRepository, ): OncePerRequestFilter() { val log = logger() override fun doFilterInternal( request: Http..

    스프링 세션 - 이중 발급과, 인코딩된 세션

    🔍 트러블 슈팅 ✏️Key가 두 개 생성되는 문제 세션을 저장하는 로직은 다음과 같다. @Component class SessionFilter( private val redisSessionRepository: RedisSessionRepository, ): OncePerRequestFilter() { val log = logger() override fun doFilterInternal( request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain ) { val session = getSessionFromCookie(request) --- 1 if (session == null) { val sessionId = r..

    스프링 세션의 이해 - 등장 배경과 그 원리

    🔍 HttpSession ✏️ 세션이 왜 필요한가요? 웹에서 데이터를 전송하는 데 기본적으로 사용되는 HTTP는 본질적으로 상태가 저장되지 않는다. 즉, 동일한 사용자로부터 여러 요청이 들어와도 이를 인식하지 못한다. 그러나 웹 애플리케이션에서 사용자 인증, 장바구니 등과 같은 상태를 유지하는 것이 중요한 시나리오가 있다. 세션은 웹 애플리케이션이 특정 기간 동안 사용자를 인식하고 구분할 수 있게 함으로써 이러한 한계를 극복하는 데 중요한 역할을 한다. ✏️기존 세션의 문제점 전통적인 HttpSession은 컨테이너(ex. Tomcat) 에 종속되어 사용된다. 즉 컨테이너가 세션을 생성하고 애플리케이션에 세션 ID를 제공한다. 이런 방식은 기본적으로 클러스터링 환경에서 실행되는 경우 각 컨테이너가 자체 ..