2021년 Top 10 안에 3개의 새로운 카테고리가 등장했고, 이름 변경 및 통합이 이루어졌다. 그걸 이어받아 2022년에 업데이트된 주의해야 할 주요 보안 취약점은 다음과 같다. (크게 4년에 한번씩 바뀌고 매년 조금씩 업데이트 되는 구조라고 이해하면 된다. 잘 나온 원문을 번역 돌렸으니 이해를..) THE OWASP TOP 10 LIST 2022 1. Broken Access Control 액세스 제어는 사용자가 지정된 권한의 범위를 넘어서는 작업을 수행하지 못하도록 하는 전략을 구현합니다. 액세스 취약성 때문에 인증되지 않았거나 원하지 않는 사용자가 분류된 데이터 및 프로세스 및 사용자 권한 설정에 액세스할 수 있습니다. 예를 들면 JWT(JSON Web Token) 액세스 제어 토큰을 사용하여 ..
web 서버에서 간단히 id/pw 정보를 통해 인증을 하듯 Spring Security에서도 '약속된 계정'을 통해 인증을 할 수 있다. DB로부터 사용자 정보를 가지고 와서 하는 인증 개념은 아니고 최소한의 인증이라고 생각하면 된다. 하는 방법과 계정을 설정하는 방법에 대해서 알아보도록 하겠다. pom.xml (maven) org.springframework.boot spring-boot-starter-security pom.xml 에 위와 같이 spring-boot-starter-security dependency를 추가해주자. 끝이다. dependency만 추가해도 Spring Security에서 제공하는 가장 기본적인 인증이 바로 적용된다. 물론 custom loginform을 이용해서 로그인을 ..
OWASP는 Open Web Application Security Project의 약자이고 웹 어플리케이션 보안을 위해 힘쓰는 비영리 조직이 진행하는 프로젝트이다. 매년 보안상 이슈가 될 항목들에 대해 10가지를 선정하여 발표한다. 그게 OWASP top 10이다. 매년 top 10에 속해있는 항목이 바뀌지만 굵직한 놈들(Injection, XSS, CSRF..) 은 항상 껴있다. 2021년에는 어떤 항목들이 Top 10에 선정이 되었는지 살펴보자. (잘 나온 원문을 번역기 돌렸으니 이해를..) THE OWASP TOP 10 LIST 1. INJECTION ATTACKS (인젝션) 주입 공격은 공격자가 악성 코드를 응용 프로그램에 입력함으로써 데이터 또는 전체 응용 프로그램을 손상시키는 명령을 강제로 실..
remember-me.. 나를 기억해 라는 영화가 문득 떠올랐다. 뭔 내용인지는 거의 90프로 까먹는것 같다. 머리가 점점 휘발성이 되어가는것 같다. 무튼.. 우리가 일상에서 많이 사용하는 자동로그인, 로그인유지 등등의 표현으로 많이 사용하고 있는 remember-me 라는 Spring Security의 기능에 대해 살펴보도록 하겠다. remember-me가 무슨 기능이냐? 로그인시에 위와 같이 '로그인 유지'라고 되어 있는 체크박스에 체크를 하고 로그인을 하면 내가 브라우저를 닫거나 개발자도구에서 세션을 끊어버리는 등 직접 로그아웃 버튼을 눌러 로그아웃을 하지 않는 이상 remember-me라는 기능이 계속 로그인을 유지시켜준다. 잘 하시는 분들은 이런 기능들을 설명할때도 시퀀스 다이어그램이나 클래스 ..
Keycloak을 사용하면 세션, 쿠키 및 토큰 시간 제한을 자유롭게 설정할 수 있다. 설정방법에 대해 알아보자. 전역설정 (Realm 단위) KeyCloak Session, Token에 대한 Timeout 설정은 Realm Settings > Tokens 에서 가능하다. 이곳에 나온 용어가 해석이 어렵다면 아래의 표를 참조하도록 하자. 물론 내가 멋지게 해석할수는 없고 번역기를 돌린것이다. ConfigurationDescriptionRevoke Refresh Token새로 고침 토큰 흐름을 수행하는 OIDC 클라이언트의 경우이 플래그가 켜져 있으면 해당 새로 고침 토큰을 취소하고 클라이언트가 사용해야하는 요청으로 다른 토큰을 발행합니다. 이것은 기본적으로 새로 고침 토큰이 한 번만 사용된다는 것을 의미..
Spring Security tag를 사용하다 보면 이런 오류가 발생하는것을 볼 수 있다. [ERROR][o.a.c.c.C.[.[.[.[dispatcherServlet].log:line175] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/jsp/common/layout.jsp'.] with root cause org.apache.j..
KeyCloak은 쓰면 쓸수록 매력적인 솔루션인것 같다. 잘 다룰줄만 알면 인증, 권한 관련해서는 어느정도 경지에 오를수도 있을것 같다는 생각이 든다. 요즘같이 OSS가 각광받는 시대에는 꼭 알고 있어야 할 OSS라고 생각한다. KeyCloak 설치부터 해서 springboot app SSO 연동, JWT 발급, Jenkins와의 연동 등의 포스팅을 했었는데 이번에는 OAuth2를 활용해서 구글 계정으로 KeyCloak 로그인을 하는 방법에 대해서 알아보겠다. 테스트 환경 구축 일단 테스트 환경부터 구축을 해보자. 중점적으로 살펴볼 부분은 '어떻게 OAuth2를 통해 로그인을 하는가'이기 때문에 별도의 어플리케이션과 연동은 하지 않고 가장 간단하게 nginx를 설치해서 http://localhost 라는..
예전에 CORS(Cross-Origin Resource Sharing)를 filter를 사용해서 설정하는것에 대해 포스팅을 한적이 있다. Spring Security를 사용하면 이렇게 별도의 filter를 만들지 않고 간단하게 CORS 설정을 할 수 있다. SecurityConfig.java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(HttpSecurity http) throws Exception { // http formLogin, headers .. 설정 http.cors(); } @Bean CorsConfi..