🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/42577 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 💡 접근법phone_book에 있는 한 번호가 다른 번호의 접두어인지 확인하는 문제이다. 따라서 문자열을 기준으로 정렬을 수행한다. 이후 현재 번호가 바로 다음 번호의 접두어에 해당하는지 확인한다.만약 접두어에 해당할 경우 False를 출력하고, 해당하지 않을 경우 다음 번호를 비교한다. 😎 내 코드def solution(phone_book): answer = True ..
분류 전체보기
URL 접근 제한 미흡 취약점이란?인증 혹은 인가되지 않은 사용자가 접근 제한된 페이지에 접근하게 되는 취약점이다.인증 혹은 인가된 사용자가 접근 가능한 페이지에 대해 접근 제한이 존재하지 않거나 존재하지만 우회 포인트가 존재하여 발생한다. 💡 인증과 인가인증이란 로그인과 같이 인증된 사용자인지의 여부를 파악하는 것을 말하고, 인가란 특정 사용자가 해당 작업에 대한 권한의 존재 여부를 파악하는 것을 말한다. 공격 원리 분석파리미터 변조 취약점과 동일하게 공격 유무를 파악하기가 어렵다.공격자는 페이지의 URL을 유추해아 한다.이때 사전 대입을 통한 수동적 유추 방식과 자동화 도구를 통한 유추 방식이 있다. 보통 네이밍 패턴이나 robot.txt를 통해 유추하게 된다. 대응 방안접근 제한이 필요한 부분에 ..
파라미터 변조 취약점이란?사용자 입력값인 파라미터를 변조하여 악의적인 행위를 하는 공격이다. 공격 원리 분석정상적인 동작 예시사용자 입력값인 id 파라미터를 통해 id 값에 해당하는 회원 정보를 반환한다. 공격동작 예시공격자는 사전 대입으로 id 파라미터 변조를 통해 사용자 정보를 반환받는다. 서버사이드에서는 공격 유무를 파악하기 어렵다. 따라서 어플리케이션 단에서 세션을 통해 검증해야 한다. 또한 사용자 입력값을 통해 사용자 아이디를 받아오기 보다는 세션을 통해 사용자 아이디를 받아와야 한다. 대응 방안1. 사용자 입력 값에 대한 검증사용자의 입력 값을 반드시 받아서 처리해야 하는 경우에는 사용자의 세션과 파라미터로 입력받은 사용자를 비교한다. 2. 세션을 통한 처리회원 정보 수정이나 마이페이지 조회의..
파일 업로드 취약점이란?파일 업로드 기능에 대해서 발생하는 취약점으로, 공격자는 비정상 파일을 서버에 업로드한다.정상 파일과 비정상 파일은 서버 사이드 스크립트로 작성된 웹쉘 코드이냐 아니냐로 구분된다. 악성 스크립트가 웹 서버에 업로드 된다면 업로드한 파일을 통해 시스템 명령어를 실행할 수 있게 되어 OS Injection과 동일한 효과를 발생시킬 수 있는 취약점이다. 하지만 OS Injection과 다르게 웹 서비스에서 파일 업로드 기능은 필수 기능이므로, 취약점이 발생할 확률이 매우 높다. 공격 원리 분석사용자로부터 파일명을 입력받는다.기존의 경로와 입력받은 파일명을 조합한다.서버에 파일을 업로드하기 위해 파일 출력이 수행된다.업로드된 악성 스크립트를 통해 웹쉘에 접근하게 된다. 웹쉘이란 무엇인가..
파일 다운로드 취약점이란?서버에 있는 파일에 다운로드하는 기능에 대해서 비정상적인 파일을 다운로드 받는 취약점이다.공격 대상은 바로 파일 다운로드 기능이다.정상적인 파일과 비정상적인 파일은 지정된 경로냐 지정된 경로가 아니냐에 따라 구분된다. 정상적인 파일은 지정된 경로에 있는 파일을 다운로드한다. 여기서 공격자는 경로 이동 문자를 삽입하여 경로를 변조하여 공격을 수행하고, 사용자에게 지정된 경로를 벗어난 비정상적인 파일을 다운로드하게 한다. 공격 원리 분석서버는 사용자로부터 파일 경로를 입력받는다. 이때 공격자는 경로 이동 문자가 삽입된 비정상적인 경로를 입력하여 서버에서 중요한 파일을 다운로드 시도한다. → ../../etc/passwd사용자 입력 값과 기존 경로가 조합된다. → /wetroot/up..
🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 💡 접근법노드를 최대한으로 방문하면 하나의 네트워크가 형성된다. 해당 네트워크의 개수를 구하는 문제이다.DFS를 통해 한 번 탐색을 시작할 때 최대한으로 탐색한다. 또한 visited 리스트를 사용하여 노드 방문 여부를 체크한다. 😎 내 코드def solution(n, computers): answer = 0 visited = [False] * n def ..
🗂️ 문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 💡 접근법최단거리를 구하기 위해 BFS를 사용한다.이때 상하좌우로 이동하면서 맵을 탐색해야 한다. 따라서 변화량을 나타내는 dx와 dy 리스트를 생성한다. 초기 시작 위치를 (0, 0)으로 지정하고, 시작 위치에서부터 상하좌우로 탐색한다. 탐색하면서 조건문을 통해 맵을 벗어나지 않는지, 벽이 아닌지, 방문한 적이 없는지 확인한다.위 조건을 모두 만족할 경우 방문 처리를 수행하고, 맵..
🗂️ 문제링크: https://www.acmicpc.net/problem/1325 💡 접근법BFS/DFS를 사용하여 각 정점에서 이동할 수 있는 정점들의 최대 개수를 구하는 문제이다."A가 B를 신뢰하는 경우 B를 해킹하면, A도 해킹할 수 있다." 즉, 방향이 있는 그래프를 만들어 B → A 단방향 그래프를 정의해야 한다. 또한 시간복잡도 제한때문에 Python3가 아닌 PyPy3로 제출해야 성공할 수 있다. 😎 내 코드import sysfrom collections import dequeN, M = map(int, sys.stdin.readline().split())graph = [[] for _ in range(N+1)]for _ in range(M): a, b = map(int, sys..