배우다
# while 문과 do ~ while 문을 처음 사용했습니다.
코드 풀면서 if문으로 하기엔 너무 번거롭다
– 정리: https://growth-msleeffice.116
# 프로그래밍 문제를 풀면서 알아낸 Array.fill(), String.repeat() 메소드가 있어서 정리했습니다.
– 정리: https://growth-msleeffice.117
# MySQL
– have는 group by의 where 절입니다!
https://www.w3schools.com/mysql/mysql_having.asp
– 열 값이 null이면 IFNULL을 사용하여 다른 값으로 바꿉니다!
https://www.w3schools.com/mysql/mysql_ifnull.asp
– 날짜 형식을 마음대로 바꾸고 싶다면!
DATE_TIME(‘날짜’,’%y-%m-%d’)
y – 2자리 연도 / Y – 4자리 연도
m – 두 자리 월 / M – 문자 월
d – 두 자리 일 / D – 문자 일
도전적인
로그인 개선(accessToken, refreshToken)
1. 두 페이로드 모두 bycript로 암호화(페이로드 정보 복호화 방지)
2-1 XSS 공격에 대한 가능한 모든 경로를 차단하고 localStorage에 저장하거나
2-2 accessToken을 localStorage에 저장하고 refreshToken을 보안 쿠키에 저장하면 refreshToken이 하이재킹되는 것을 방지할 수 있습니다.
refreshToken으로 새 accessToken을 가져와 localStorage에 저장 → 이 시점에서 accessToken의 만료 시간은 매우 짧습니다.
3. 그러나, 쿠키에 포함된 RefreshToken의 값을 모르더라도 다른 부분에서 xss 공격에 취약한 경우 API 호출을 할 때, 쿠키는 요청에 대해 자동으로 전송되므로 xss 공격은 여전히 가능합니다.
졸업 증서
RefreshToken을 보안 httpOnly 쿠키로, accessToken을 JSON 페이로드로 받아 웹 애플리케이션에서 로컬 변수로 사용합니다.
이를 통해 CSRF 취약점 공격을 방지할 수 있으며 XSS 취약점 공격에 의해 저장된 사용자 정보를 방지할 수 있습니다.
하지만 XSS 취약점을 통해 API 호출을 보내는 경우 무방비 상태이므로 서버와 클라이언트 모두 스스로 XSS 차단을 시도해야 합니다.
묻다
– 출처가 다른 경우 보안 쿠키를 전달하는 방법은 무엇입니까?
– DB에 저장되어 있는 RefreshToken을 꺼내 쿠키에 포함된 RefreshToken과 비교/검증하는 로직을 구현하면 DB 부하가 높아진다.
Redis를 사용해야 합니까? Redis를 사용하는 경우 어떤 패턴이나 데이터 구조가 포함되어야 합니까?
– 다양한 웹 공격에 대비하는 방법은?