Java/Spring
-
XSS 란?Cross Site Scripting 의 줄임말로 XSS의 약어이다.원래는 CSS가 맞지만 이미 CSS 라는 스타일 시트(.css) 가 사용되고 있어 XSS라고 칭한다. XSS 공격이란?크로스 사이트 스크립팅의 뜻처럼 사이트 간 스크립팅 이라는 이름의 웹 취약점이다.웹 사이트의 관리자가 아닌 제 3자가 악의적인 목적을 가지고 악성 스크립트를 삽입하여의도하지 않은 명령을 실행시키거나 쿠키, 세션 등을 탈취할 수 있는 취약점이다. 예를 들어 게시판의 글을 작성할 때 작성 내용 안에 아래와 같은 문장을 삽입한다.그럼 DB 데이터에 위와 같은 내용이 삽입되고 사용자는 게시판 글을 확인하면alert 창으로 사용자의 쿠키값이 보여진다.이렇게 사용자가 악의적인 목적을 가지고 악성 스크립트를 삽입하는 공격을..
Spring Boot XSS Filter 설정(lucy-xss-servlet-filter)XSS 란?Cross Site Scripting 의 줄임말로 XSS의 약어이다.원래는 CSS가 맞지만 이미 CSS 라는 스타일 시트(.css) 가 사용되고 있어 XSS라고 칭한다. XSS 공격이란?크로스 사이트 스크립팅의 뜻처럼 사이트 간 스크립팅 이라는 이름의 웹 취약점이다.웹 사이트의 관리자가 아닌 제 3자가 악의적인 목적을 가지고 악성 스크립트를 삽입하여의도하지 않은 명령을 실행시키거나 쿠키, 세션 등을 탈취할 수 있는 취약점이다. 예를 들어 게시판의 글을 작성할 때 작성 내용 안에 아래와 같은 문장을 삽입한다.그럼 DB 데이터에 위와 같은 내용이 삽입되고 사용자는 게시판 글을 확인하면alert 창으로 사용자의 쿠키값이 보여진다.이렇게 사용자가 악의적인 목적을 가지고 악성 스크립트를 삽입하는 공격을..
2023.05.02 -
Filter 와 Interceptor Interceptor 는 스프링 컨테이너 영역이므로 Spring 빈으로 등록이 가능하지만 Filter 는 서블릿 컨테이너의 영역이라서 Spring 의 빈으로 등록할 수 없다고 생각했다. 위 이미지와 같이 Filter 는 서블릿 컨테이너의 영역에서 존재하고 서블릿이 제공하는 기술이며스프링 컨테이너의 영역과는 분리되어 있다. 하지만 개발을 하게 되면 Filter 를 Spring 빈으로 등록하여 사용하는걸 볼 수 있다.서블릿 컨테이너에서 관리되는 DelegatingFilterProxy 가 서블릿 컨테이너와 스프링 컨테이너를연결할 수 있는 프록시용 필터이다. Spring Security Filter Spring Security 는 위 이미지와 같이 서블릿 Filter 를..
Spring Security DelegatingFilterProxy(서블릿 컨테이너와 스프링 컨테이너의 다리 역할)Filter 와 Interceptor Interceptor 는 스프링 컨테이너 영역이므로 Spring 빈으로 등록이 가능하지만 Filter 는 서블릿 컨테이너의 영역이라서 Spring 의 빈으로 등록할 수 없다고 생각했다. 위 이미지와 같이 Filter 는 서블릿 컨테이너의 영역에서 존재하고 서블릿이 제공하는 기술이며스프링 컨테이너의 영역과는 분리되어 있다. 하지만 개발을 하게 되면 Filter 를 Spring 빈으로 등록하여 사용하는걸 볼 수 있다.서블릿 컨테이너에서 관리되는 DelegatingFilterProxy 가 서블릿 컨테이너와 스프링 컨테이너를연결할 수 있는 프록시용 필터이다. Spring Security Filter Spring Security 는 위 이미지와 같이 서블릿 Filter 를..
2023.03.23 -
Java8 이하의 버전에서 Interface 는 추상메서드만 멤버로 가질 수 있었다. Java8 이후 부터는 Interface 에 default 키워드를 통해 추상메서드가 아닌 구현된 메서드인 Default Method를 가질 수 있다. 즉, 메서드에 내용을 추가할 수 있다. 아래는 일반적인 Interface 및 추상메서드이다. Animal Interface public interface Animal { void tiger(int a); } 위처럼 기본적인 Interface 형식은 추상메서드만 존재했지만 Java8 에서 default 키워드를 통해 메서드안에 내용을 추가할 수 있다. public interface Animal { void tiger(int a); default Integer cat(int..
Interface 의 default 키워드(Default Methods)Java8 이하의 버전에서 Interface 는 추상메서드만 멤버로 가질 수 있었다. Java8 이후 부터는 Interface 에 default 키워드를 통해 추상메서드가 아닌 구현된 메서드인 Default Method를 가질 수 있다. 즉, 메서드에 내용을 추가할 수 있다. 아래는 일반적인 Interface 및 추상메서드이다. Animal Interface public interface Animal { void tiger(int a); } 위처럼 기본적인 Interface 형식은 추상메서드만 존재했지만 Java8 에서 default 키워드를 통해 메서드안에 내용을 추가할 수 있다. public interface Animal { void tiger(int a); default Integer cat(int..
2023.03.21 -
Interceptor 란사전적 의미로 "낚아채다" 라는 뜻처럼 사용자 요청이 Filter, DispatchServlet에 의해요청에 알맞는 컨트롤러를 찾아 컨트롤러에게 전달되기 전 요청(HttpRequest, HttpResponse)을낚아채어 개발자가 원하는 추가적인 작업을 진행하기 위해 사용한다. 위 이미지를 보면 사용자의 모든 요청을 Front Controller 라고 하는 DispatcherServlet이 받는다.요청받은 DispatcherServlet은 HandlerMapping 을 통해 요청에 맞는 적절한 Controller를 찾아요청을 넘기게 되는데 Controller로 요청을 넘기기전에 Interceptor가 요청을 가로챈다. 요청을 가로채어 필요한 작업을 진행한 후 다시 Controller..
HandlerInterceptor 사용하기Interceptor 란사전적 의미로 "낚아채다" 라는 뜻처럼 사용자 요청이 Filter, DispatchServlet에 의해요청에 알맞는 컨트롤러를 찾아 컨트롤러에게 전달되기 전 요청(HttpRequest, HttpResponse)을낚아채어 개발자가 원하는 추가적인 작업을 진행하기 위해 사용한다. 위 이미지를 보면 사용자의 모든 요청을 Front Controller 라고 하는 DispatcherServlet이 받는다.요청받은 DispatcherServlet은 HandlerMapping 을 통해 요청에 맞는 적절한 Controller를 찾아요청을 넘기게 되는데 Controller로 요청을 넘기기전에 Interceptor가 요청을 가로챈다. 요청을 가로채어 필요한 작업을 진행한 후 다시 Controller..
2023.03.14 -
LogoutFilter 란? LogoutFilter는 Spring Security 에서 로그아웃에 대한 처리를 담당하는 필터로 사용자가 특정 로그아웃 URL로 로그아웃을 요청 했을 경우에만 적용되는 필터이다. LogoutFilter는 세션 무효화, 인증토큰 삭제 등 Security Context에서 해당 인증 객체를 삭제한다. 아래는 LogoutFilter 클래스와 doFilter 메서드이다. requiresLogout() 메서드를 통해 요청된 URL이 로그아웃 URL인지 확인한다. 아래는 requiresLogout 메서드이다. RequestMatcher 의 matches 를 통해 URL 정보를 확인하고 맞으면 true 를 리턴한다. 로그아웃 URL 이 맞을 경우SecurityContextHolder 에..
[Spring Security] LogoutFilterLogoutFilter 란? LogoutFilter는 Spring Security 에서 로그아웃에 대한 처리를 담당하는 필터로 사용자가 특정 로그아웃 URL로 로그아웃을 요청 했을 경우에만 적용되는 필터이다. LogoutFilter는 세션 무효화, 인증토큰 삭제 등 Security Context에서 해당 인증 객체를 삭제한다. 아래는 LogoutFilter 클래스와 doFilter 메서드이다. requiresLogout() 메서드를 통해 요청된 URL이 로그아웃 URL인지 확인한다. 아래는 requiresLogout 메서드이다. RequestMatcher 의 matches 를 통해 URL 정보를 확인하고 맞으면 true 를 리턴한다. 로그아웃 URL 이 맞을 경우SecurityContextHolder 에..
2023.02.17 -
ContentType 은 HTTP 요청 시 자원을 명시하기 위해 사용한다. HTTP 의 간단한 구조는 아래와 같다.Request LineHTTP HeaderEmpty LineMessage Body Post Method 를 이용해 ajax 요청 시 Message Body 부분에 데이터가 들어가고해당 자원에 대해 명시하기 위해 HTTP Header 의 Content-Type 을 사용하는데Content-Type에는 Body에 들어간 자원이 어떤 자원인지 표시해준다. Content-Type 종류TEXTtext/css, text/javascript, text/html, text/plain FILEmultipart/form-data Applicationapplication/json, application/x-www..
ajax 요청 시 contentType(application/json, application/x-www-form-urlencoded)ContentType 은 HTTP 요청 시 자원을 명시하기 위해 사용한다. HTTP 의 간단한 구조는 아래와 같다.Request LineHTTP HeaderEmpty LineMessage Body Post Method 를 이용해 ajax 요청 시 Message Body 부분에 데이터가 들어가고해당 자원에 대해 명시하기 위해 HTTP Header 의 Content-Type 을 사용하는데Content-Type에는 Body에 들어간 자원이 어떤 자원인지 표시해준다. Content-Type 종류TEXTtext/css, text/javascript, text/html, text/plain FILEmultipart/form-data Applicationapplication/json, application/x-www..
2023.02.07