inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

예시로 들어주신 상황에 대한 의문점이 있습니다.

해결됨

스프링 시큐리티

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 여기서는 공격자가 이미지 태그를 이용해서 특정 주소로의 요청을 보내도록 유도하는 것 같은데, 이 경우에는 GET 메서드로 요청을 보내므로 따로 csrf 토큰을 검사하지 않으니, 여전히 공격에 취약하다고 봐야 하지 않나요?

  • java
  • spring-boot
  • spring-security
Yu Byung Suk 댓글 1 좋아요 0 조회수 488

선생님 68강 관련해서 질문 있어요~! 부탁드리겠습니다~

미해결

스프링 프레임워크는 내 손에 [스프1탄]

선생님께서 알려주신대로 하였고(resultMap) 문제없이 잘 작동하였습니다!~ 오류가 생겨서 질문드리는게 아니오라... 관련된 개념이 궁금해서 질문드려요~! 컨트롤러에서 Member mvo = memberMapper.getMember(m.getMemID()); 이렇게 가져올 때 상황이에요~ ▲위 테이블은 mem_stbl 테이블이고, ▲그 아래 테이블은 mem_auth 테이블이에요~ ▲여기서 이렇게 resultType="kr.board.entity.Member"으로 가져올 수 없는 이유를 잘 모르겠어요 sql 테이블이 매퍼.xml 파일에서 select * from mem_stbl mem LEFT OUTER JOIN mem_auth auth on mem.memID=auth.memID where mem.memID= '질문'; 이렇게 합쳐지고 그 결과 테이블이 이것 인데요~ <▼두서가 길었는데요! 질문의 핵심입니다!▼> Member 클래스의 멤버 변수에 넣지 못하는 이유가 결과 집합의 행이 2개여서 그런 건가요? 그래서 reseltMap을 써주는 것인가요?? 만약 그렇다면 1행으로 만들어준다면(회원 가입 시 체크박스 1개를 선택한다면) resultMap을 사용하지 않고 resultType="kr.board.entity.Member" 로 해줘도 괜찮은 건가요? 부탁드리겠습니다! 아예 잘못 알고 있는 걸까요? ㅠ ------------------ 선생님 강의 최고입니다! 애청자에요 하하하ㅎㅎ

  • jsp
  • spring
  • mvc
  • spring-security
열심인 참새 댓글 1 좋아요 0 조회수 533

SessionCreationPolicy의 IF_REQUIRED와 NEVER 속성에 대해서

해결됨

스프링 시큐리티

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. IF_REQUIRED의 설명 중 "필요시"라고 되어있는 부분이 있는데 어떤 상황이 "필요시"에 해당할까요?? NEVER의 설명 중 스프링 시큐리티가 생성하지 않지만 "이미 존재"하면 사용이라고 써놓으셨는데, 애초에 생성하지 않았는데 어떻게 이미 존재할 수 있나요??

  • java
  • spring-boot
  • spring-security
Yu Byung Suk 댓글 1 좋아요 0 조회수 833

접근이 거부되었습니다. 예외가 발생합니다.

미해결

스프링 시큐리티

5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2) 강의 관련 질문입니다. 참고로, 현재 SecurityConfig 파일이 파일명으로 구분해서 Ajax 인증용과 폼인증 두개 입니다. 문제는 로그인까지 성공하고 /mypage 로 들어가면 접근 거부 예외가 생깁니다. ' org.springframework.security .access.AccessDeniedException: 접근이 거부되었습니다.' SecurityConfig , AjaxSecurityConfig 설정파일명으로 구분했고 마지막에 설정 코드도 올렸지만 authenticationManager 같은 Bean 메서드들도 이름으로 구분했습니다. 사용자정보, 권한정보등 제대로 갖고 왔는데 어디가 잘못된건지 잘모르겠네요.. 혹시 시큐리티 설정파일에서 서비스 클래스 두가지를 사용해서 그런지 의심도 되고 그렇네요.. private final SecurityResourceService securityResourceService; private final UserDetailsService userDetailsService; 아래에 도움이 될까 해서 디버깅화면 캡쳐해서 올렸습니다. 감사합니다. AbstractSecurityInterceptor 클래스 UrlFilterInvocationSecurityMetadataSource 클래스 RoleVoter 클래스 ExceptionTranslationFilter 클래스 FormAccessDeniedHandler 클래스 AccessDeniedException 클래스 웹페이지에는 흰 배경만 나타나고 302 코드를 반환하네요. Request URL: http://localhost:8080/mypage Request Method: GET Status Code: 302 Remote Address: [::1]: 8080 Referrer Policy: strict-origin-when-cross-orig 시큐리티 설정파일 @Configuration @RequiredArgsConstructor @Order(1) public class SecurityConfig { @Bean public WebSecurityCustomizer configure() { return (web) -> web.ignoring().mvcMatchers( "/css/**", "/js/**", "/error" ); } private final AuthenticationConfiguration authenticationConfiguration; private final AuthenticationDetailsSource authenticationDetailsSource; private final AuthenticationSuccessHandler formAuthenticationSuccessHandler; private final AuthenticationFailureHandler formAuthenticationFailureHandler; private final SecurityResourceService securityResourceService; private final UserDetailsService userDetailsService; public PasswordEncoder passwordEncoder() { return PasswordEncoderFactories.createDelegatingPasswordEncoder(); } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/users", "user/login/**", "/login*").permitAll() .antMatchers("/mypage").hasRole("USER") .antMatchers("/messages").hasRole("MANAGER") .antMatchers("/config").hasRole("ADMIN") .anyRequest().authenticated() .and() .exceptionHandling() //.accessDeniedPage("/denied") .accessDeniedHandler(accessDeniedHandler()) .and() .addFilterBefore(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class) ; http .formLogin() .loginPage("/login") .loginProcessingUrl("/login_proc") .authenticationDetailsSource(authenticationDetailsSource) .defaultSuccessUrl("/") .successHandler(formAuthenticationSuccessHandler) .failureHandler(formAuthenticationFailureHandler) .permitAll() ; //http.csrf().disable(); return http.build(); } public FormAuthenticationProvider formAuthenticationProvider() { return new FormAuthenticationProvider(userDetailsService, passwordEncoder()); } @Bean public AccessDeniedHandler accessDeniedHandler(){ FormAccessDeniedHandler accessDeniedHandler = new FormAccessDeniedHandler(); accessDeniedHandler.setErrorPage("/denied"); return accessDeniedHandler; } @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { ProviderManager authenticationManager = (ProviderManager) authenticationConfiguration.getAuthenticationManager(); authenticationManager.getProviders().add(formAuthenticationProvider()); return authenticationManager; } @Bean public FilterSecurityInterceptor customFilterSecurityInterceptor() throws Exception { FilterSecurityInterceptor filterSecurityInterceptor = new FilterSecurityInterceptor(); filterSecurityInterceptor.setSecurityMetadataSource(urlFilterInvocationSecurityMetadataSource()); filterSecurityInterceptor.setAccessDecisionManager(affirmativeBased()); filterSecurityInterceptor.setAuthenticationManager(authenticationManager(authenticationConfiguration)); return filterSecurityInterceptor; } public AccessDecisionManager affirmativeBased() { AffirmativeBased affirmativeBased = new AffirmativeBased(getAccessDecisionVoters()); return affirmativeBased; } private List<AccessDecisionVoter<?>> getAccessDecisionVoters() { return Arrays.asList(new RoleVoter()); } /** * 자원/권한 정보를 저장하고 있는 클래스를 빈으로 생성 * @return * @throws Exception */ @Bean public FilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception { return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject()); } private UrlResourcesMapFactoryBean urlResourcesMapFactoryBean() { UrlResourcesMapFactoryBean urlResourcesMapFactoryBean = new UrlResourcesMapFactoryBean(); urlResourcesMapFactoryBean.setSecurityResourceService(securityResourceService); return urlResourcesMapFactoryBean; } }

  • java
  • spring-boot
  • spring-security
댓글 1 좋아요 0 조회수 418

vue같은 프런트 엔드 프레임워크를 사용할 때는 CSRF 토큰을 어떻게 설정하나요?

미해결

스프링 시큐리티

코드를 보면 타임리프가 만들어준 CSRF를 meta 태그로 전달하는데 이를 서버쪽에서 만들어주는 html 파일을 통해 브라우저에 전달하는데요. Vue 같은 프런트 엔드 프레임워크를 사용하면 Web Server를 별도로 띄워서 정적파일을 관리하는데 이런 상황에선 타임리프가 정적파일에 CSRF 토큰을 심어줄 수 없는 구조라고 생각이 됩니다. 이런 경우에는 CSRF 공격을 어떻게 막을 수 있나요? 제가 생각나는 건 이 두 가지네요.. Web Server에서 요청 프록시를 해주고(Reverse 프록시) Web Server에서 CSRF 토큰을 관리한다. CSRF 토큰이 필요한 곳은 정적파일을 WAS에서 관리한다. 좋은 방법이 있을까요?

  • java
  • spring-boot
  • spring-security
m123.lee 댓글 1 좋아요 0 조회수 1735

43강 컨트롤러 관련된 질문입니다~

미해결

스프링 프레임워크는 내 손에 [스프1탄]

안녕하세요~ 다름이 아니라 폼-> 컨트롤러로 넘긴 값 중 memPassword는 아직 비교 되기 전에 컨트롤러로 넘어가서 누락 메세지에 걸리게 되므로 삭제한다고 하셨었는데요~ 회원가입 페이지에서 비밀번호를 입력할때마다 1차와 2차 비밀번호가 비교되면서 화면에 "비밀번호 일치"가 뜬다는 것은 이미 그 함수의 내용은 실행되고 있고 $("#memPassword").val(memPassword1); 전송버튼 누르기 전에 memPassword의 input값이 value값으로 이미 세팅이 되어 있는 것이 아닌가요??ㅠ 관련된 내용은 강의 38분 50초쯤에 있습니다~! 감사합니다

  • jsp
  • spring
  • mvc
  • spring-security
열심인 참새 댓글 1 좋아요 0 조회수 435

Account 객체 형변환 오류 문의드립니다

미해결

스프링 시큐리티

실전프로젝트 강의 듣고 있습니다. 접근권한 관련해서 오류가 있어서 문의 드립니다. authentication.getPrincipal() 을 Account 로 형변환시 오류가 발생하네요. 값들을 찍었을 때 아래와 같이 나옵니다. 1. accountContext.getAccount() : Account(Id=1, username=user, password={bcrypt}$2a$10$Uh4Z9AZmSNzdke9QgvawxODb0pK2vwV2xzrMS9EgXGzICO54WoIU2, email=abc@gmail.com , age=99, role=ROLE_USER) 2. authentication.getPrincipal() : io.security.corespringsecurity.security .service.AccountContext [Username=user, Password=[PROTECTED], Enabled=true, AccountNonExpired=true, credentialsNonExpired=true, AccountNonLocked=true, Granted Authorities=[ROLE_USER]] getPrincipal() 에 관련없는 텍스트가 나와서 그런지 잘모르겠군요. => ' io.security.corespringsecurity.security .service.AccountContext' 어떤 이유에서 오류가 발생하는지 답변 부탁드려요~ @GetMapping(value={"/denied", "/api/denied"}) public String accessDenied(@RequestParam(value = "exception", required = false) String exception, Model model){ Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); // 형 변환이 안되네요. Account account = (Account) authentication.getPrincipal(); model.addAttribute("username", account.getUsername()); model.addAttribute("exception", exception); return "user/login/denied"; }

  • java
  • spring-boot
  • spring-security
원데이 댓글 1 좋아요 0 조회수 560

role 컬럼은 꼭 들어가야하나요?

해결됨

스프링부트 시큐리티 & JWT 강의

안녕하세요 강의내용보고 궁금해서 글 남깁니다! 대부분 jwt 시큐리티를 구현할때 role이라는 컬럼을 넣으시는거 같은데 왜 들어가야하는지 궁금합니다. 필수값인가요? 감사합니다

  • spring
  • spring-security
  • jwt
성경수 댓글 1 좋아요 1 조회수 516

ExceptionTranslationFilter가 하는 역할에 대해서 질문합니다.

미해결

스프링 시큐리티

이번 강의 초반에 구분 사항 인증 예외 가 발생하면 해당 필터, 지금 같은 경우는 UsernamePasswordAuthenticationFilter 가 받아서 처리를 하고 인가 예외 는 ExceptionTranslationFilter 가 처리 한다. 라고 설명해주셨는데요. 앞서 개념 강의 예외 처리 및 요청 캐시 필터 : ExceptionTranslationFilter, RequestCacheAwareFilter 9) 인가 개념 및 필터 이해 : Authorization, FilterSecurityInterceptor 에서는 인증 예외 와 인가 예외 모두 ExceptionTranslationFilter 가 받는다고 설명해주셔서 혼란이 옵니다. 어떤 것이 맞는 설명인가요? Access Denied 는 인가 예외인데 강의 제목이 인증 거부 처리 - Access Denied 입니다. 인가 거부 처리 - Access Denied로 바꾸는 게 맞지 않나요? 그렇게 중요한 문제는 아닌 듯 합니다만, 제가 제대로 알고 있나 확인하는 차원에서 질문드립니다. 이렇게 2개 질문 드리고요. 좋은 강의 감사드립니다. 덕분에 도움이 많이 되고 있습니다. 답변 부탁드립니다.

  • java
  • spring-boot
  • spring-security
고리오영감 댓글 1 좋아요 0 조회수 359

Spring Security 최신버전(Spring Boot 3.X.X 대)의 WebSecurity 설정 공유드립니다.

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

최신버전으로 진행하다보니 막혔었는데요. 구글링, ChatGPT 등을 통해서 동작하는 코드 공유드립니다. 정확한 구현은 아닐 수 있겠지만, 강의를 진행하는 데는 문제 없는 것 같습니다. 참고만 부탁드려요~ package com.example.userservice.security; import com.example.userservice.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.security.servlet.PathRequest; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.ObjectPostProcessor; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.util.matcher.IpAddressMatcher; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class WebSecurity { private final UserService userService; private final BCryptPasswordEncoder bCryptPasswordEncoder; private final ObjectPostProcessor<Object> objectPostProcessor; private static final String[] WHITE_LIST = { "/users/**", "/", "/**" }; @Bean protected SecurityFilterChain config(HttpSecurity http) throws Exception { http.csrf().disable(); http.headers().frameOptions().disable(); http.authorizeHttpRequests(authorize -> { try { authorize .requestMatchers(WHITE_LIST).permitAll() .requestMatchers(PathRequest.toH2Console()).permitAll() .requestMatchers(new IpAddressMatcher("127.0.0.1")).permitAll() .and() .addFilter(getAuthenticationFilter()); } catch (Exception e) { e.printStackTrace(); } } ); return http.build(); } public AuthenticationManager authenticationManager(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder); return auth.build(); } private AuthenticationFilter getAuthenticationFilter() throws Exception { AuthenticationFilter authenticationFilter = new AuthenticationFilter(); AuthenticationManagerBuilder builder = new AuthenticationManagerBuilder(objectPostProcessor); authenticationFilter.setAuthenticationManager(authenticationManager(builder)); return authenticationFilter; } } 이렇게 하시고 중요한 것이, Login Form을 사용하지 않기 때문에 AuthenticationFilter 클래스의 Override 메소드 중 successfulAuthentication 메소드 내부에super.successfulAuthentication(request, response, chain, authResult); 코드가 작성되어 있다면, 아래처럼 제거 또는 주석 처리를 꼭 해야 합니다! (다른 질문 글에서 발견하였습니다, 공유 감사드립니다.) 하지 않은 경우 에러가 발생하며 login 요청이 제대로 동작하지 않습니다. package com.example.userservice.security; import com.example.userservice.vo.RequestLogin; import com.fasterxml.jackson.databind.ObjectMapper; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import java.io.IOException; import java.util.ArrayList; public class AuthenticationFilter extends UsernamePasswordAuthenticationFilter { @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { try { RequestLogin creds = new ObjectMapper().readValue(request.getInputStream(), RequestLogin.class); return getAuthenticationManager().authenticate( new UsernamePasswordAuthenticationToken( creds.getEmail(), creds.getPassword(), new ArrayList<>() ) ); } catch (IOException e) { throw new RuntimeException(e); } } @Override protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authResult) throws IOException, ServletException { //super.successfulAuthentication(request, response, chain, authResult); } }

  • spring-boot
  • spring-cloud
  • spring-security
  • 최신버전
이강민 댓글 5 좋아요 18 조회수 12159

스프링부트 버전 문의 드립니다.

미해결

스프링 시큐리티

현재 스프링부트 2.7.10 사용하고 있는데 강의 소스와 많이 틀려서 고생하고 있네요 ㅜ 버전을 다운그레이드 해서 공부할려고 하는데 그게 좋을까요? 실무에서 아직 2.7.10 이하 버전을 많이 사용한다면 버전을 낮추고 싶네요.. 강사님 의견은 어떠신가요?

  • java
  • spring-boot
  • spring-security
원데이 댓글 1 좋아요 0 조회수 610

인증요청시 문의드립니다.

미해결

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

강의진행중 궁금한게 있어서 문의드렸습니다! 강의중에 토큰이 탈취될수도 있다고하셔서 String jws = Jwts.builder() .setSubject(String.valueOf(userId)) .signWith(key) .setIssuedAt(new Date()) .compact(); 코드를 넣어주셨습니다. 매번 다른 accessToken값이 나올수 있도록이요! 그 결과 로그인 시마다 매번 다른 토큰값이 나오는데, 로그인을 하고나서 기존의 토큰값으로 /foo 메소드를 호출하여도 인증이 되는데 왜 그런걸까요?? 1. 로그인시 abc토큰이 나와서 abc토큰으로 /foo 컨트롤러를 호출함 인증됨 2. 또 한번 로그인시 abcd토큰이 나옴. 그런데 이전 로그인 토큰이였떤 abc토큰으로 /foo 컨트롤러를 호출하여도 인증 성공됨. 왜 그런지 궁금합니다!

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
김은재 댓글 3 좋아요 0 조회수 740

시즌3 예정에 열렬한 환호를 보냅니다.

미해결

호돌맨의 요절복통 개발쇼 (SpringBoot, Vue.JS, AWS)

시즌3 예정에 열렬한 환호를 보냅니다.

  • vue.js
  • aws
  • spring-boot
  • jpa
  • spring-security
Dale 댓글 1 좋아요 9 조회수 463

루트에서 로그인 성공후 에러 메시지가 보입니다.

미해결

스프링 시큐리티

7) 로그아웃 및 인증에 따른 화면 보안 처리 강의 입니다. http://localhost:8080 URL 이 위와 같은 상태에서 로그인 페이지로 이동해서 로그인을 하면 아래와 같은 메시지가 나타납니다. http://localhost:8080/mypage 경로 상태에서 로그인 페이지로 이동해서 로그인하면 정상적으로 오류 메시지 없이 잘 되는데 서브 경로가 없는 상태에서 로그인을 하니까 문제가 있어요 세션에는 등록이 되고 로그인처리는 되었는데 마지막화면에서 오류메시지만 떠요. 답변 부탁드릴게요 로그인 이후 URL : http://localhost:8080/error {"timestamp":"2023-03-10T01:58:06.693+00:00","status":999,"error":"None","message":"No message available"}

  • java
  • spring-boot
  • spring-security
원데이 댓글 1 좋아요 0 조회수 1291

SecurityConfig.java 에서 AuthenticationManager 부분에 대한 질문입니다.

미해결

스프링 시큐리티

실전 프로젝트 보고 있습니다. DB 연동 인증 처리(2) : CustomAuthenticationProvider 학습 중인데요. 스프링 버전이 2.7x 이라서 SecurityConfig.java 설정이 맞지를 않네요. 검색하니깐 아래 코드 처럼 설정하면 된다고 하던데 근데 아래 코드, authenticationManager 메서드 부분이 없어도 CustomAuthenticationProvider 클래스에 @Component 어노테이션 넣으니깐 사용되더라구요... 로그인도 잘되구요. CustomUserDetailsService 클래스도 마찬가지인데, 아래 authenticationManager 메서드가 없어도 되는건지 궁금합니다. 혹시 나중에 문제가 생기지 않을까 불안하기도 하네요. 답변 부탁드리겠습니다.~ @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { ProviderManager authenticationManager = (ProviderManager) authenticationConfiguration.getAuthenticationManager(); authenticationManager.getProviders().add(customAuthenticationProvider()); return authenticationManager; }

  • java
  • spring-boot
  • spring-security
원데이 댓글 1 좋아요 0 조회수 817

csrf 토큰 질문드립니다

미해결

스프링 시큐리티

13강에서 한가지 여쭤볼게있어서 문의드립니다. csrf토큰값이 임의의 UUID형태의 문자열인데 강의에서 헤더에 직접 추가하여 서버에 재요청 하여 통과하는것을 보여주셨는데요 재요청할때에는 이전 요청에서 디버깅으로 확인한 토큰을 이용하여 재요청을 하였는데요. 따라서, 토큰의 값이 안바뀌엇다고 생각이드는데 왜 안바뀐거죠? 이부분에 대해서 문의드립니다!

  • java
  • spring-boot
  • spring-security
smathj 댓글 1 좋아요 0 조회수 637

쿠키의 단점을 보완한 세션

미해결

스프링 시큐리티

쿠키 값을 변조 가능, → 예상 불가능한 복잡한 세션Id를 사용한다. -> 그런데 세션도 변조가능한거아닌가요? 그냥 더 예상이 불가능하다는건가요? 쿠키값도 랜덤값을 사용한다고 알고있어서요... 쿠키에 보관하는 정보는 클라이언트 해킹시 털릴 가능성이 있다. → 세션Id가 털려도 여기에는 중요한 정보가 없다. -> 쿠키에 보관하는 정보는 보통 그럼 중요한 정보를 보관하는건가요..? 왜 중요한 정보를 보관하는거죠 털릴수도있는데..

  • java
  • spring-boot
  • spring-security
정지호 댓글 1 좋아요 0 조회수 351

쿠키가 세션보다 보안에 취약한 이유가 뭔가요?

미해결

스프링 시큐리티

쿠키가 세션보다 보안에 취약한 이유가 잘 이해가 가지 않습니다 1. 쿠키가 세션보다 더 털릴 가능성이 높아서인가요? 근데 세션도 결국 쿠키의 형태로 로컬에 저장되잖아요! 2. 그리고 chatgpt에게 물어보니 쿠키는 클라가 변경할 수 있는데 세션은 변경을 못한다고 합니다. 세션이더라도 다른사람의 세션id값을 탈취할 수만있다면 헤더값만 변경하면 클라가 변경할 수 있게 되는거잖아요. 그래서 챗지피티가 한말이 이해가 잘안가네요.

  • java
  • spring-boot
  • spring-security
정지호 댓글 1 좋아요 -1 조회수 1177

결과값이 다르게 나와요

미해결

스프링 시큐리티

디버그 돌릴때 AjaxAuthentication.authenticate() 메소드를 찍어놔서 AjaxAuthentication를 거쳐서 동작하는거 확인했습니다 db에 {username:user,password:1111}가 없는 상태에서 진행하면 loadByUsername()에서 account=null이라 UsernameNotFoundException이 발생하는데 강사님 영상에서는 해당 exception없이 진행되는걸로보아 db에 해당 유저가 미리 저장되어있다고 짐작, 프로젝트 실행 후 회원가입으로 해당 유저를 만든후 ajax.http를 실행했습니다. 그리고 이 밑이 그 결과입니다. response code 200으로 http://localhost:8080/의 response body 부분이 출력됩니다. 그런데 강사님 영상에서는 UsernameNoFoundExcpeion이 발생하지도 않고 잘 동작했으면서 저와 다르게 response body도 없고 302가 나옵니다. 제가 코드 입력을 잘못한건가요? http://localhost:8080/api/login Redirections: -> http://localhost:8080/ HTTP/1.1 200 X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Frame-Options: DENY Content-Type: text/html;charset=UTF-8 Content-Language: ko-KR Transfer-Encoding: chunked Date: Mon, 06 Mar 2023 10:00:46 GMT <!DOCTYPE html> <html lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Home</title> <script src="/js/jquery-2.1.3.min.js"></script> <link rel="stylesheet" href="/css/base.css"/> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"/> </head> <body> <div> <nav class="navbar navbar-dark sticky-top bg-dark "> <div class="container"> <a class="text-light" href="#"><h4>Core Spring Security</h4></a> <ul class="nav justify-content-end"> <li class="nav-item"><a class="nav-link text-light" href="/logout">로그아웃</a></li> <li class="nav-item"><a class="nav-link text-light" href="/">HOME</a></li> </ul> </div> </nav> </div> <div class="container"> <div class="row align-items-start"> <nav class="col-md-2 d-none d-md-block bg-light sidebar"> <div class="sidebar-sticky"> <ul class="nav flex-column"> <li class="nav-item"> <div style="padding-top:10px;" class="nav flex-column nav-pills" aria-orientation="vertical"> <a href="/" style="margin:5px;" class="nav-link active">대시보드</a> <a href="/mypage" style="margin:5px;" class="nav-link text-primary">마이페이지</a> <a href="/messages" style="margin:5px;" class="nav-link text-primary">메시지</a> <a href="/config" style="margin:5px;" class="nav-link text-primary">환경설정</a> </div> </li> </ul> </div> </nav> <div style="padding-top:50px;" class="col"> <div class="container text-center"> <h1 class="text-primary">DASHBOARD</h1> <div class="security"></div> <h1>Core Spring Security 에 오신 것을 환영합니다.</h1> </div> </div> </div> </div> <div> <footer class="page-footer font-small blue"> <div class="footer-copyright text-center py-3 border-top"> <p class="text-primary">Copyright 2020 Core Spring Security. All Right Reserved</p> </div> </footer> </div> </body> </html> Response file saved. > 2023-03-06T190046.200.html Response code: 200; Time: 152ms; Content length: 2368 bytes

  • java
  • spring-boot
  • spring-security
gil jung 댓글 2 좋아요 0 조회수 484

인기 태그

인프런 TOP Writers

주간 인기글