CSRF란?Cross-Site Request Forgery의 약어로, 공격자에 의해 사용자가 의도하지 않은 요청을 수행하는 공격이다. 사용자 정보 수정, 패스워드 변경, 회원 탈퇴, 게시글 작성/수정/삭제 등의 행위가 가능하다. 공격 원리 분석예시 1) 서버 1개공격자가 악성 스크립트를 게시글에 작성해 둔다.인증된 사용자가 해당 게시글을 읽으면 악성 스크립트에 의해 패스워드 변경 요청이 자동으로 발생한다. 이때 스크립트는 Client-Side Script로 구성되어 있다. 따라서 클라이언트가 웹 서비스에 패스워드 변경 요청을 하게 된다. 예시 2) 서버 2개공격자는 사용자에게 A라는 사이트의 회원 탈퇴를 요청하는 악성 스크립트를 게시글에 작성해 둔다.인증된 사용자가 해당 게시글을 읽으면 악성 스크립트에 ..
분류 전체보기
1. application.yml 파일 구성spring: primary-datasource: jdbc-url: jdbc:mysql://localhost:3306/{DB1}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 username: {username} password: {password} driver-class-name: com.mysql.cj.jdbc.Driver secondary-datasource: jdbc-url: jdbc:mysql://localhost:3306/{DB2}?serverTimezone=Asia/Seoul&characterEncoding=UTF-8 username: {username} passwo..
🗂️ 문제링크: https://www.acmicpc.net/problem/1753 💡 접근법가중치가 자연수인 방향 그래프이므로 최단 경로를 구하기 위해 다익스트라를 사용해야 한다. 또한 거리가 가장 작은 노드를 자동으로 선택하기 위해 우선순위 큐(heapq)를 사용한다. distance의 요소는 모두 INF로 초기화되어 있다. 만약 if distance[now_node] 조건을 만족할 경우 now_node는 이미 방문된 노드이므로 방문 처리를 위한 visited 리스트가 따로 필요하지 않다.또한 해당 조건을 만족할 경우 이미 dist는 distance[now_node]보다 큰 값이기 때문에 dist 값으로는 now_node와 연결된 다른 노드의 최단 거리를 구할 수 없다. 따라서 continue를 ..
🗂️ 문제링크: https://www.acmicpc.net/problem/18352 💡 접근법인접 리스트를 통해 그래프를 구현하고, BFS를 사용하여 각각의 도시까지의 최단 거리를 distance 리스트에 저장한다. 현재 노드의 거리 값은 이전 노드의 거리 값 + 1이다.이후 K와 거리가 같은 도시를 출력하면 된다. 😎 내 코드import sysfrom collections import dequedef BFS(v): queue = deque() queue.append(v) visited[v] = True while queue: now_node = queue.popleft() for i in graph[now_node]: if not ..
🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/43236 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 💡 접근법바위 사이의 거리의 최솟값을 기준으로 이진 탐색의 범위를 조절해야 한다. low는 distance의 바위 사이 거리의 최솟값인 1로, high는 바위 사이 거리의 최댓값인 distance로 설정한다. mid를 바위 사이 거리의 최솟값으로 생각하고 탐색을 진행한다. 이때 바위 사이의 거리의 최솟값 중 최댓값을 구하는 것이 목표이다. 따라서 바위 사이의 거리를 구하고, 구한 ..
🗂️ 문제링크: https://www.acmicpc.net/problem/10815 💡 접근법이분탐색 시 탐색 범위를 설정해야 한다. 해당 문제에서는 카드 리스트를 정렬하고, 카드 리스트 인덱스의 최솟값(0)과 최댓값(len(card_list)-1)을 low와 high로 각각 지정한다. mid의 값을 변경하며 탐색한다. 이때 카드 리스트에서 mid 인덱스에 해당하는 값보다 상근이가 가지고 있는 숫자가 작으면 mid 값을 줄여야하므로 high = mid - 1로 설정한다. 반대의 경우엔 mid 값을 키워야하므로 low = mid + 1로 설정한다. 만약 카드 리스트에서 mid 인덱스에 해당하는 값이 상근이가 가지고 있는 숫자와 같다면 1을 저장한다. 😎 내 코드import sysN = int(sys...
🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/43238?language=python3# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 💡 접근법문제에서 원하는 것은 모든 사람이 심사를 받는데 걸리는 시간이므로 start와 end 그리고 mid 모두 시간에 관련된 변수라고 짐작할 수 있다. 즉, 입국 심사에 걸리는 최소 시간과 최대 시간을 의미하므로 low는 1로 지정하고 high는 max(times) * n로 지정한다. 탐색할 범위를 지정했으므로 mid 값을 변경시켜 값을 확인해야..
🗂️ 문제링크: https://www.acmicpc.net/problem/11726 💡 접근법n=1일 때 직사각형을 채우는 방법은 1가지다.n=2일 때 직사각형을 채우는 방법은 2가지다.n=3일 때 직사각형을 채우는 방법은 3가지다.n=4일 때 직사각형을 채우는 방법은 5가지다.n=5일 때 직사각형을 채우는 방법은 8가지다. 이를 점화식으로 나타내면 dp[i] = dp[i-1] + dp[i-2] (N>2)이다. 😎 내 코드import sysn = int(sys.stdin.readline())dp = [0] * 1001dp[1] = 1dp[2] = 2for i in range(3, n+1): dp[i] = dp[i-1] + dp[i-2]print(dp[n]%10007) ✅ 정답 확인