Spring 12 (23.04.21)

Jane·2023년 4월 21일
0

IT 수업 정리

목록 보기
110/124

1. 암호화 및 CSRF 정리

  • 암호화(Encrypt), 복호화(Decrypt)
  • 여러 가지 암호화 모듈 : Decoding 할 때 문제가 생길 수 있어서, 한 가지만 정해서 사용한다.
  • BCryptPasswordEncoder

2. 암호화 코드 테스트

2-1. 비밀번호 암호화

UserMapperTest.java

	@Test
	void testPasswordEncoder() {
		String plainPW = "1234";
		String encodedPW = new BCryptPasswordEncoder().encode(plainPW);
		
		System.out.println(encodedPW);
	}

$2a$10$mniOpY/L2NF7aDPgRDZDL.dgnFLy.Tza9oT7ELPu2sHaApsQD0XfS


  • assertNotEquals(plainPW, encodedPW)
    원래 비번과 암호화된 비번이 같지 않다
  • assertEquals(plainPW, encodedPW)
    원래 비번과 암호화된 비번이 같다
  • assertTrue(new BCryptPasswordEncoder().matches(plainPW, encodedPW))
    암호화된 비번이 원래 비번과 맞는지 체크

  • Bean 객체로 만들어서 처리할 수 있다.

SecurityConfig.java (@Bean 추가)

	@Bean
	public PasswordEncoder bCryptPasswordEncoder() {
		return new BCryptPasswordEncoder();
	}

UserMapperTest.java

@Autowired
	private PasswordEncoder passwordEncoder;

	@Test
	void testPasswordEncoder() {
		String plainPW = "1234";
		String encodedPW = passwordEncoder.encode(plainPW);

		System.out.println(encodedPW);

	}

2-2. UserVO의 내용 가지고 오기

  • ID 메롱, PW 메롱으로 세팅

SecurityConfig.java

	@Bean
	public UserVO userVO() {
		UserVO vo = new UserVO();
		vo.setPassword("메롱");
		vo.setUsername("메롱");
		return vo;
	}

UserMapper.java

@Test
	void testPasswordEncoder() {

		System.out.println(userVO);
  • UserVO(username=메롱, password=메롱, enabled=0, authList=null)

2-3. 암호화 코드 확인하기

  • DB에는 암호화된 비밀번호가 저장
  • Spring Security에서 비교해준다.
@Test
	void testPasswordEncoder() {
		String plainPW = "1234";
		String encodedPW = passwordEncoder.encode(plainPW);

		System.out.println("plain : " + plainPW + " / encoded : " + encodedPW);
		System.out.println(passwordEncoder.matches(plainPW, encodedPW));

	}

plain : 1234 / encoded : $2a$10$PqMRd968AEIEgrOwoE72fe91gKlVx5XsBcfW4jh05yrmA3/.r6RH6
true

3. CSRF

(사이트 간의 위조 요청)

SecurityConfig.java

  • 기본 : CSRF 가 켜져 있는 상태
  • http.csrf().disable(); : 주석 처리

login.jsp

  • form:form을 form으로 수정

  • 주석 처리 되어 있던 csrf 내용 주석 풀기
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />

  • localhost:8282 접속 후 유저 홈에 접속하여 로그인 시도하면 접속 가능

  • jsp 부분의 csrf 부분을 주석처리하고 다시 접속 시도하면 403 Forbidden Error 출력한다.

  • 태그 라이브러리를 이용하여 CSRF 처리를 할 수 있다. (상단에 지정된 태그라이브러리의 이름과 맞춘다.)
    <form:form>으로 수정하여 쓴다.
profile
velog, GitHub, Notion 등에 작업물을 정리하고 있습니다.

0개의 댓글