[TIL] Today I Lerned - 221229
2022. 12. 30. 00:10ㆍ기록/TIL
[TIL] Today I Lerned - 221229
221229 기록
알고리즘
[Python] 프로그래머스 lv2 - 숫자의 표현 (tistory.com)
오래간만에 투 포인터를 적용하는 문제. 최근에는 간단한 구현문제 위주로 풀었기에 손에서 바로 나오지는 않던 문제였다.
문제를 읽고 해당 문제는 투포인터로 풀어야겠다는 생각은 들었다. 다만 가장 걸렸던 것은 answer +=1 부분을 어디에 배정하느냐 문제였다. 하루에 한 문제 정도 풀면서 진행을 하고 있지만 좀 다양한 문제를 풀어야겠다.
이번 문제를 풀게된것도 여러 문제를 뒤적거리다가 풀이방법이 생각나는 익숙한 문제를 풀려고 접근을 하였기에 빨리 풀었다. 다만 문자열 압축, 쿼드압축등의 문제는 이전에 들어본 방식이지만 실제로는 엄두가 안 나서 문제를 읽고 나왔다. 내일부터는 익숙한 부분의 문제만 푸는 것이 아닌 생소하더라도 모르던 부분의 문제를 풀어야겠다.
정리
- CSRF - Cross site request forgery
- 브라우저에 저장된 쿠키의 세션 정보를 활용하여 사용자가 의도하지않은 요청 전달
- 페이스북, 웹에서 위조요청 하는 서비스에 희생자가 로그인
- 쿠키 세션등에 사용자 정보가 저장이 되어있고 문제가 되는 http request 주소를 사용자에게 전달
- 해당 request에서 사용자의 인증정보를 통해 원하지 않은 request실행
- 서버의 입장에서는 공격을 당해 실행한 것이 아닌 사용자 요청으로 인해 실행을 진행한 것이기에 해당 요청 수행
- 쿠키의 취약점을 이용한 공격이기에 REST 방식에서는 disable 가능
- 브라우저에 저장된 쿠키의 세션 정보를 활용하여 사용자가 의도하지않은 요청 전달
- 코드
- http.csrf().disable()
- csrf 공격을 방지하기 위해 protection이라는 기능 사용
- 이때 protection의 경우 default 기능
- GET요청을 제외하고 POST / PUT / DELETE 등의 데이터를 변화시킬 수 있는 요청에 대해 보호
- 이때 보호하는 수단으로 csrf 토큰이 사용이 됨. 이러한 csrf 토큰이 들어와야 안전하다는 의미로 기능 수행
- disable()
- rest 방식의 api는 stateless란 성격을 가지고 있음
- 각 요청마다 요청에 필요한 요소(OAuth / jwt)를 다 가지고 와서 요청을 하게 됨
- 해당 방식은 서버에 인증정보를 보관하지 않음
- 굳이 csrf 토큰을 매번 인증할 필요가 없으니 해당 기능 diable()'
- permitAll()
- 사용자의 회원가입, 로그인과 같은 요청은 Filter 인증이 되지 않도록 permitAll() 처리
- Specify that URLs are allowed by anyone.
- 해당 URL로 접근하는 항목들은 모두 허용
- 이때 편의를 위해 컨트롤러 쪽 URL만 작성 후 와일드카드 ** 처리
- 와일드카드
- 여러 리터럴 문자 또는 빈 문자열로 해석 가능한 *와 같이 단일 문자로 표시되는 자리 표시자
- 이때 *라면 처음 단계의 맥락만, **라면 뒤의 모든 단계를 표현가능
- UserController의 경우 지금은 /users 다음단계만 존재하지만 추후에 기능 추가로 다음 맥락이 추가될 수 있으니 **로 표시
- 이때 와일드카드 처리가 되어 실제 로그인, 회원가입의 검증 및 인증은 service에서 처리한다.
- 나머지 요청들은 로그인 후 토큰의 생성으로 Filter에서 처리하게 됨
- @AuthenticationPrincipal
- 로그인에 필요한 정보를 받아오는 방법
- UserDetails 타입을 지님
- 사용자의 회원가입, 로그인과 같은 요청은 Filter 인증이 되지 않도록 permitAll() 처리
- http.csrf().disable()
참고
와일드카드 문자 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
'기록 > TIL' 카테고리의 다른 글
[TIL] Today I Lerned - 230102 (0) | 2023.01.02 |
---|---|
[TIL] Today I Lerned - 221230 (0) | 2022.12.30 |
[TIL] Today I Lerned - 221228 (0) | 2022.12.28 |
[TIL] Today I Lerned - 221227 (0) | 2022.12.27 |
[TIL] Today I Lerned - 221226 (0) | 2022.12.26 |