전체 글

[백준][python]14499 주사위굴리기
문제 https://www.acmicpc.net/problem/14499 소스코드 import sys if __name__ == "__main__": n,m,x,y,k = map(int,input().split()) board = [] bottom = 0 ans = [] for _ in range(n): board.append(list(map(int, input().split()))) move = list(map(int,input().split())) dice = [[[0,0],0],[[-1,0],0],[[1,0],0],[[0,-1],0],[[0,1],0],[[0,2],0]] def switch(s): if s == 1: # 동쪽으로 굴리기 (0,0) -> (-1,0) (-1,0) -> (0,2) (1,..

Spring Security 6.1 클라이언트로 권한 부여 및 토큰 요청 커스터마이징
1. 개요 SpringSecurity를 사용해서 OAuth2.0 사용자 인증을 구현하려고 합니다. 금융결제원에서 제공하는 오픈뱅킹 서비스를 구현하기 위해선 사용자 인증을 받고 토큰을 통해 자원에 접근할 수 있습니다. API 메뉴얼을 확인했을 때 본인확인을 위한 방식이 3-legged 방식으로 간편로그인하고 동일한 구조입니다. 그래서 spring security에서 제공하는 oauth2login 을 사용해서 권한 부여 및 토큰 요청을 할 수 있다고 생각했습니다. 하지만 우리가 진행하는 OAuth2.0 요청이 표준과 다르기 때문에 커스터마이징이 필요합니다. 그 과정을 정리해보겠습니다. 2. 의존성 추가 dependencies { implementation 'org.springframework.boot:spr..
[프로그래머스]표 병합
문제 https://school.programmers.co.kr/learn/courses/30/lessons/150366 소스코드 def solution(commands): answer = [] val_table = [["EMPTY" for _ in range(51)] for _ in range(51)] addr_table = [[(r,c) for c in range(51)] for r in range(51)] def update_val(v1, v2): for i in range(51): for j in range(51): if val_table[i][j] == v1: val_table[i][j] = v2 def update_addr(ix, iy, v): x, y = int(ix), int(iy) r, ..
[백준][python]15683 감시
문제 https://www.acmicpc.net/problem/15683 소스코드 import sys import itertools if __name__ == "__main__": n, m = map(int, input().split()) arr = [list(map(int, input().split())) for _ in range(n)] cctv_cnt = 0 cctv = [] wall = 0 for i in range(n): for j in range(m): if arr[i][j] > 0 and arr[i][j] < 6: cctv_cnt += 1 cctv.append([i, j]) if arr[i][j] == 6: wall += 1 cctv_list = list(itertools.product([i..

[프로그래머스][python]요격 시스템
문제 https://school.programmers.co.kr/learn/courses/30/lessons/181188 소스코드 def solution(targets): answer = 0 targets.sort(key = lambda x: (x[1],x[0])) E = 0 for s,e in targets: if s >= E : E = e answer +=1 return answer 설명 e를 기준으로 오름차순 정렬한다. e를 기준으로 새로운 s를 보았을 때 e와 같거나 작으면 겹치는 부위이므로 새로운 요격이 필요하다 (answer + 1)
[백준][python]16434 드래곤앤던전
문제 https://www.acmicpc.net/problem/16434 소스코드 import sys import math if __name__ == "__main__": n,atk = map(int,input().split()) room = [list(map(int,sys.stdin.readline().split())) for _ in range(n)] max_hp = 0 l,r = 1, sys.maxsize while l
Spring Boot 2.0 과 Spring Security 5의 OAuth 2.0 클라이언트 설정 방법 : CommonOAuth2Provider
CommonOAuth2Provider Spring Boot 2.0 버전(Spring Security 5 이상)에서 제공하는 enum 클래스이다. 구글, 깃허브, 페이스북, 옥타의 OAuth2.0 Provider들의 기본 설정을 포함하고 있다. CommonOAuth2Provider 을 사용하면 설정 파일에서 client-id 와 client-secret만 설정하면 되고 나머지 설정은 CommonOAuth2Provider에서 제공하는 기본 설정을 사용하면 된다. (입력하지 않아도 된다.) CommonOAuth2Provider에는 google의 기본 설정을 포함하기 때문에 client-id 와 client-secret 정보만 입력해주었다. 하지만 카카오와 네이버의 정보는 없기 때문에 provider 설정값을 ..
OpenID (OIDC)
OpenID Connect 사용자 인증을 위한 기술이다. 내가 인증을 직접 구현하는 것이 아닌 구글, 페이스북, 트위터 같은 대규모 웹 사이트에 사용자의 인증 절차를 위임할 수 있는 기술이다. 이렇게 하면 사용자들은 웹사이트마다 ID를 만들고 인증을 하는 것이 아닌, 자신이 신뢰하는 대규모 사이트 (OpenID Provider라고 함, 구글, 트위터, 페이스북 등) 에서 제공하는 OpenID 인증 서비스 하나만으로 나를 인증할 수 있게 된다. OpenID는 비영리기관인 OpenID Foundation에서 추진하는 개방형 표준 및 분산 인증 프로토콜이다. 즉 OpenID는 인증을 위해 등장했다. OAuth2.0 프로토콜의 최상위 레이어와 동일한 레이어이다. OpenID Connect는 OAuth 2.0을 ..

[TIL-230829]CSRF
CSRF Cross Site Request Forgery 사이트 간 요청 위조 웹 사이트의 취약점 공격 방법 중 하나이다. (서버에 직접적인 공격 X) 공격자는 사용자가 로그인한 상태에서 악의적인 웹페이지를 방문하게 만들어, 웹 페이지에서 사용자의 권한을 도용하여 서버에 악의적인 요청을 보낼 수 있다. 예를 들어, 사용자가 인터넷 뱅킹에 로그인한 상태에서 자동으로 계좌에서 돈을 이체하는 요청을 보내는 식으로 공격을 한다. CSRF가 이루어지는 과정 사용자가 은행 사이트에 로그인을 한 상태이다 사용자가 피싱사이트에 접속한다(피싱메일이나, 팝업 광고를 통해) 공격자는 피싱사이트에 접속한 사용자로 가장하여 은행에 이체 요청을 전송한다. 사용자는 이체 요청을 한 적 없지만 이체가 실행된다 CSRF 대응 방법 1..