Back-end 65

파일 다운로드, 파일 업로드 API 구현 시 보안 상 유의점

1. 파일 다운로드 Directory Traversal Attacks: Attackers might attempt to traverse directories by manipulating the fileName parameter. To prevent this, you should validate and sanitize the fileName parameter to ensure it only points to files within the designated storage directory. Authentication and Authorization: Implement proper authentication and authorization mechanisms to ensure that only authori..

Rate Limiting Mechanism

Spring Boot REST API to prevent users from making too many requests within a short period of time 서버가 제공할 수 있는 자원에는 제한이 있기 때문에 안정적으로 서비스를 제공하기 위해 예를 들어api 호출횟수를 1분당 60회로 제한하고, 60회를 넘어서는 순간 요청을 처리하지 않고 리턴한다. 이를 Throttling이라고도 한다. Rate Limit가 필요한 사례 1. 서비스의 안정성 및 성능보장 : 서버가 다운되는 등의 사고를 미연에 방지하기 위해 2. 서비스의 가용성 확보 : 과도한 트래픽으로부터 서비스를 보호 3. 보안 : 로그인, 프로모션 코드와 같이 보안적으로 중요한 기능을 brute force attck으로부터 보호한..

SpringSecurity를 사용할 때 일관적인 Exception 처리를 위해

1. Spring Security Filter chain의 구조 따라서 @Controller나 @Service에서 GlobalCustomException처리하면 (@ControllerAdvice, @ExceptionHandler) 해당 메소드로 넘어가지만, Filter에서 똑같이 Exception 터트려도 GlobalCustomException로 넘어가지 않는다. 해결방법은 Filter영역에서 Exception 처리는 아래와 같이. @Component // 유효한 자격증명을 제공하지 않고 접근하려 할 때 401Unauthorized 에러를 리턴 public class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override p..

작업 스케줄러 - 크론탭(crontab)

1. crontab이란 crontab은 원하는 시간에 특정 작업을 실행하게 하는 텍스트 파일이다. 이 crontab에 작성된 파일을 찾아 cron이라는 시스템의 데몬이 작성된 일정대로 작업을 실행하게 되는 것. 주기적이고 반복적인 작업에 많이 사용된다. 1) crond 실행여부 확인 ps -ef | grep crond 2) crontab의 작업 목록 확인, crontab 편집, crontab 삭제 // crontab 작업 목록 crontab -l // crontab 편집 crontab -e // crontab 삭제 crontab -r 주기적으로 특정작업을 실행해야할 경우 crontab 사용. (JAVA의 경우 스케쥴러로 Quartz를 이용할 수도 있다.) cron은 Linux 운영체제에 기본으로 설치되어..

Java Wrapper class

1. Wrapper class 기본타입의 데이터를 객체로 취급해야 하는 경우 자바에서 제공하는 Wrapper class를 이용한다. 예를 들어 어떤 메소드의 파라미터가 객체타입만 가능하다면, 기본타입을 그대로 사용할 수 없기 때문에 래퍼클래스를 한 번 거쳐 객체로 변환후 메소드를 호출하는 것. * primitice type, reference type 원시 타입은 쉽게 말해, 정수, 실수, 문자, 논리 리터럴등의 실제 데이터 값을 저장하는 타입이고, 참조 타입은 객체(Object)의 번지를 참조(주소를 저장)하는 타입으로 메모리 번지 값을 통해 객체를 참조하는 타입이다. 2. 오토박싱, 오토 언박싱 Integer number = new Integer(200); // 박싱 int n = number.int..

Java Optional, Stream

1. Optional Optional은 null 또는 값을 감싸서 NPE(NullPointerException)로부터 부담을 줄이기 위해 등장한 Wrapper 클래스이다. Optional은 값을 Wrapping하고 다시 풀고, null 일 경우에는 대체하는 함수를 호출하는 등의 오버헤드가 있으므로 잘못 사용하면 시스템 성능이 저하된다. 그렇기 때문에 메소드의 반환 값이 절대 null이 아니라면 Optional을 사용하지 않는 것이 좋다. 즉, Optional은 메소드의 결과가 null이 될 수 있으며, null에 의해 오류가 발생할 가능성이 매우 높을 때 반환값으로만 사용되어야 한다. 2.Optional 메소드 1) Optional.emptuy() : 값이 Null인 경우 2) Optional.of() ..

Spring Filter, Interceptor의 범위 및 SpringSecurity FilterChain와의 관계

0. Servlet Filter VS. HandlerInterceptor 아래 그림에서와 같이 Filter는 DispatcherSevlet 앞에서 먼저 동작한다. Interceptor는 Dispatcher Servlet에서 Controller(Handler)사이에서 동작한다. 1) 필터 웹 어플리케이션의 Context 역할 스프링 기능을 활용하기 어려움 일반적으로 인코딩, CORS, XSS, LOG, 인증, 권한 등을 구현 2) 인터셉터 스프링의 Spring Context의 기능이며 일종의 빈 스프링 컨테이너여서 다른 빈을 주입하여 활용성이 좋다. 다른빈을 활용할 수 있어 보통 인증, 권한 등 구현함 1. JwtFilter에서 OncePerRequestFilter 상속 VS GenericFilterBea..