분류 전체보기 185

[실버 IV] 15828번. Router

문제 https://www.acmicpc.net/problem/15828 15828번: Router 인터넷을 사용하기 위해서는 컴퓨터에 인터넷 회선을 연결하거나 Wi-Fi를 연결해야 한다. 이렇게 연결된 네트워크를 통해 컴퓨터에는 통신이 가능하다. 마음에 드는 노래나 동영상이 있는 곳에 www.acmicpc.net 사용 언어 Python3 풀이 과정 실버 IV인 만큼 문제를 읽고 한 줄씩 그대로 구현했더니 어렵진 않은 문제였다. 그런데 다른 스터디원들 이야기를 들어보니 50점을 맞은 분들이 꽤 있었고 시간초과가 이유일 것 같다는 추측이어서 그 분들의 코드와 비교해보면 크게 아래 두 가지의 차이점이 있었다. 1. input() 대신 sys.stdin.readline() 사용 2. list, queue 자료..

[골드 IV] 16120번. PPAP

문제 https://www.acmicpc.net/problem/16120 16120번: PPAP 첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다. www.acmicpc.net 사용 언어 Python3 풀이 과정 처음에는 막 항상 끝이 PAP로 끝나야 하니까 그런 조건들을 생각하다가... 절대 모든 조건을 고려할수도 없고 그렇게 푸는 문제가 아닌 것 같아서 더 생각해봤다. 그런데 문제 조건에서 다음과 같이 명시했으므로 1. P는 PPAP 문자열 2. PPAP 문자열에서 P 하나를 PPAP로 바꾼 문자열은 PPAP 문자열 반대로 PPAP를 다시 P로 바꿔도 PPAP 문자열이 된다는 사실을 깨달아야 했다. 저 로직을 깨..

express 웹서비스 프로젝트에 뉴스 크롤링 추가하기_2탄

1탄에서 이어지는 내용입니다. (2) 개발자도구에서 추출할 elements 확인하기 크롬(이나 혹은 다른 브라우저 대부분)에서 F12를 누르면 개발자모드가 활성화되고 그 중 Elements 탭에서 페이지를 구성하는 요소들을 확인할 수 있다는 사실은 이 글을 보고 있는 대부분이 알 것이다. 많은 요소들 중 필요한 데이터만을 추출하기 위해 Elements 탭 왼쪽의 선택 도구를 클릭하고 원하는 영역을 확인한다. 나는 각 뉴스(사진에서 li 태그)들의 기사 제목, 썸네일, 링크가 필요했다. 영역을 확인했으면 구분 가능한 id에서부터 시작해서 내가 필요한 태그까지 안쪽으로 타고타고 들어간다. 무슨 말이냐면 사진의 저 영역은 content라는 id 아래의 news-list라는 div 아래의 div 태그 아래의 u..

express 웹서비스 프로젝트에 뉴스 크롤링 추가하기_1탄

[01 크롤링이란? ] 크롤링(crawling) 혹은 스크레이핑(scraping)은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위이다. 크롤링하는 소프트웨어는 크롤러(crawler)라고 부른다. 검색 엔진에서도 유사한 것을 필수적으로 사용하는데, 웹 상의 다양한 정보를 자동으로 검색하고 색인하기 위해 사용한다. 네이버, 구글 등도 이런 봇을 이용해 운영된다. Python이 이 분야의 선두주자로서, 대표적인 파이썬 라이브러리의 예로 beautifulsoup가 있고 그 외에도 selenium이라는 라이브러리가 인기를 끌고있다. 하지만 나는 nodejs를 사용한 프로젝트를 진행중이기 때문에 Javascript의 라이브러리를 이용해서 기능을 구현했다. 출처: https://namu.wiki/w/..

Redis 윈도우 설치 / nodejs 코드에 적용하는 법 / redis-cli 명령어 / 캐시 서버 사용전후 응답속도 차이

[01 Redis란? ] NoSQL의 종류 중 하나로 메모리 기반 Key-Value Storage 형 구조의 데이터 관리 시스템이다. 시스템 메모리를 사용하는 특징이 있으며, 문서형 NoSQL인 MongoDB 보다 빠르고 가볍게 동작하며 I/O가 수시로 발생하는 (캐시, 인증 토큰, 세션 관리 등등) 데이터 구조에서 주로 사용한다. 싱글 스레드 기반이므로 하나의 명령이 오래 걸린다면 이는 적합하지 않다. [02 Redis 설치 ] Redis는 윈도우 설치를 공식적으로 지원하지 않으므로 대신 윈도우에서 설치할 수 있도록 release 해주는 팀이 있다. 해당페이지에 가서 다운로드를 받고 설치하면 된다. 설치 옵션은 나의 경우 중간에 환경 변수 설정에만 체크해주었다. 설치가 잘 되었는지 확인하는 법은 cmd..

[실버 II] 1260번. DFS와 BFS

문제 https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 사용 언어 Python3 풀이 과정 비슷한 로직으로 첫 번째 시도는 틀렸지만 두 번째에 뜬 맞았습니다! DFS랑 BFS 개념을 여러번 공부중인데 그래도 문제에 적용하는게 왜 어려운지 나는.... 공부 방법을 바꿔서 더 많은 문제의 예시를 좀 따라 쓰고 안 보고 다시 쳐보는 연습을 해야겠다. 제출 답안 # 입력 변수 받기 N, M, V = map(int, ..

[골드 V] 2011번. 암호코드

문제 https://www.acmicpc.net/problem/2011 2011번: 암호코드 나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다. www.acmicpc.net 사용 언어 Python3 풀이 과정 또다른 동적 프로그램 문제였다. 처음 아이디어는 금방 생각 했는데 코드로 구현하는데는 좀 오래걸렸던 것 같다. 특히 경우의 수를 제대로 나누는 것이 어려웠는데, 일단 0으로 시작하는 경우만 걸러주고 이후에 해독이 안되는 코드는 자동으로 걸러지도록 경우를 나누었다. if code[0] == 0: # 0으로 시작하면 잘못된 코드 else: # 이후 한 자리, 아니면 두 자리로 ..

[Section 08] 웹 어플리케이션 취약점 (383~ 386pg)

[03 크로스 사이트 요청 위조(CSRF) ] (1) 개요 웹 어플리케이션에서 정상적인 경로를 통한 요청과 비정상적인 경로를 통한 요청을 서버가 구분하지 못할 경우 공격자가 스크립트 구문을 이용하여 정상적인 사용자로 하여금 조작된 요청을 전송하도록 하여 게시판 설정 변경, 회원 정보 변경 등의 문제가 발생할 수 있는 취약점을 말한다. 공격자가 GET 또는 POST 방식의 HTTP 요청을 통해 희생자 모르게 공격자의 의도된 행위를 수행하게 하여 특정 피래를 주는 형태이다. 공격을 당한 사용자의 권한을 공격자가 그대로 사용하게 되므로 사용자의 권한 수준에 따라 그 피해범위가 달라질 수 있다. (2) 실습 (3) 취약점 판단 기준 CSRF 취약점이 발생할 수 있는 입력 가능한 폼에 img 태그의 src 속성을..

[Section 08] 웹 어플리케이션 취약점 (375~ 382pg)

[02 크로스 사이트 스크립트 취약점] (1) 개요 웹 어플리케이션에서 사용자 입력값에 대한 필터링이 제대로 이루어 지지 않을 경우 공격자가 입려깅 가능한 폼에 악의적인 스크립트를 삽입, 해당 스크립트가 희생자 ㅌ측에서 동작하도록 하여 악의적인 행위를 수행하는 취약점을 말한다. 공격자는 취약점을 이용하여 사용자의 개인정보 및 쿠키정보 탈취, 악성코드 감염, 웹 페이지 변조 등의 공격을 수행한다. 크로스 사이트 스크립트는 크게 세가지로 구분한다. Stored XSS Reflected XSS DOM bassed XSS (2) Stored XSS 개요 공격자가 취약한 웹서버에 악성 스크립트를 저장해 놓으면 희생자가 해당 자료를 요청할 때 해당 악성 스크립트가 삽입된 응답 페이지가 전달되어 클라이언트 측에서 동..

카테고리 없음 2022.05.06

[Section 08] 웹 어플리케이션 취약점 (356~ 374pg)

[ 01. SQL Injection 취약점 ] (1) 개요 Web Application에서 입력 받아 데이터베이스로 전달하는 정상적인 SQL 쿼리를 변조, 삽입하여 불법 로그인, DB 데이터 열람, 시스템 명령 실행 등을 수행하여 비정상적인 데이터베이스 접근을 시도하는 공격 기법 조작한 입력으로 데이터베이스를 인증 절차 없이 접근 및 자료를 무단 유출하거나 변조할 수 있음 DB에 악성 스크립트를 삽입하여 접근하는 사용자를 피싱 사이트 또는 악성코드 유포 사이트로 유도 Stored Procedure를 통한 OS 명령어 실행 DB에 있는 개인정보 획득 무료 SQL Injection 취약점 스캐너 Nikto : 오픈소스로 웹서버 및 SQL Injection에 대한 취약점 점검, 리눅스 기반 SQLMap : 블..

[Section 07] 어플리케이션 기본 학습 (350~ 355pg)

[04. SNMP] 개요 TCP/IP 기반 네트워크 상의 각 호스트로부터 정기적으로 여러 관리 정보를 자동으로 수집하거나 실시간으로 상태를 모니터링 및 설정할 수 있는 서비스로 NSMP는 프로토콜일 뿐이며 이를 활용하여 실제 네트워크 관리 정보를 얻기 위해서는 관련 프로그램이 준비되어야 한다. 시스템이나 네트워크 관리자로 하여금 원격으로 네트워크 장비를 모니터링하고 환경설정 등의 운영을 할 수 있도록 하는 네트워크 관리 프로토콜이다. 관리의 편의성을 주지만 여러 취약점들이 존재하여 서비스 거부 공격, 버퍼 오버플로우, 비인가 접속 등 여러가지 문제점들이 발생할 수 있다. SNMP 구성 요소는 기본적으로 관리 시스템과 관리 대상으로 나뉘는데, 관리 시스템을 Manager, 관리 대상을 Agent라고 부른다..

[Section 07] 어플리케이션 기본 학습 (342~ 349pg)

[03 FTP] (1) 개요 FTP는 TCP/IP 기반의 원격으로 떨어져 있는 서버와 클라이언트 사이의 파일 전송을 위한 통신 프로토콜 중 하나이다. FTP 서비스는 아이디 및 패스워드가 암호화되지 않은 채로 전송되어 간단한 스니퍼에 의해서도 아이디 및 패스워드가 노출될 수 있으므로 반드시 필요한 경우를 제외하고는 FTP 서비스 사용을 제한해야 한다. FTP 서비스를 이용할 경우에는 안전한 암호화된 통신을 수행하는 다음 서비스 이용을 권장한다. SFTP : SSH 기반의 파일 전송 프로토콜로 기본적으로 22/TCP 포트 사용 FTPS : 전송계층의 SSL/TLS 기반의 파일 전송 프로토콜로 기본적으로 990/TCP 포트 사용 (2) 동작모드 FTP 능동 Mode 특징 일반적으로 능동모드가 FTP 클라이언..

[Section 07] 어플리케이션 기본 학습 (333~ 341pg)

[02 HTTP] (1) 개요 HTTP 프로토콜은 웹상에서 클라이언트와 서버 간에 통신을 위해 개발된 프로토콜이다. 웹의 정식명칭은 월드 와이드 웹으로 전 세계에 거미줄처럼 연결된 망이라는 의미이다. 다양한 하이퍼 텍스트 문서들이 웹상에서 서로 연결되어 있다. 하이퍼 텍스트 문서란 참조 혹은 링크를 통해 한 문서에서 다른 문서로 접근할 수 있는 문서를 말한다. 대표적인 하이퍼 텍스트 문서로 HTML이 있다. 주로 80/tcp 포트를 사용하며 1991년 HTTP 초기버전이 발표된 이후 1996년 1.0버전, 1999년 1.1버전이 발표되어 널리 사용되고 있다. HTTP 통신은 클라이언트 요청과 서버 응답으로 이루어져 있다. 비연결형 프로토콜 HTTP/1.0 버전까지는 클라이언트의 HTTP 요청에 대한 서버..

[실버 II] 1912번. 연속합

문제 https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 사용 언어 Python3 풀이 과정 또다른 동적계획법 문제! 처음에는 아래 제출 방식대로 제출했다가 아래와 같이 수정해봤는데 append를 사용하는게 조금은 더 시간이 걸리는 것을 확인했다. from sys import stdin input = stdin.readline n = int(input()) sequence = list(map(int, input().split())) maxSum = [] fi..

[Section 07] 어플리케이션 기본 학습 (315~ 332pg)

[01 DNS] (1) DNS 구조 용어 정리 Recursive/Cache 네임서버/DNS 서버 Recursive는 재귀적이라는 뜻으로 동일한 작업을 조건이 만족될 때까지 반복적으로 처리한다는 의미아다. 관리하는/위임받은 도메인 없이 사용자 호스트로부터 질의가 들어오며 자신의 캐시에 저장된 정보 또는 반복적 질의를 통해 그 결과를 사용자 호스트에 응답해주는 네임서버를 말한다. 일반적으로 ISP 업체가 제공해주는 DNS 서버가 해당된다. Authoritative 네임서버/DNS 서버 Authoritative는 권한있는 이라는 뜻으로 관리하는/위임받은 도메인을 가지고 있는 네임서버를 말한다. 즉 특정 도메인에 대한 정보를 관리하면서 해당 도메인에 대한 질의에만 응답해주는 네임서버를 말한다. 네임서버가 관리하..

[실버 I] 12852번. 1로 만들기2

문제 https://www.acmicpc.net/problem/12852 12852번: 1로 만들기 2 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 자연수 N이 주어진다. www.acmicpc.net 사용 언어 Python3 풀이 과정 1로만들기 첫 번째 문제와 비슷하게 풀고 getpath 함수를 하나 추가해주었다. 사실 원래 풀던 방식으로는 path를 기록하는게 너무 어렵고 감이 안와서 다른 분의 코드를 참고해서 풀었다. def getpath(x): global path current = x while current != 0: print(current, end=' ') current = path[current] 나한텐 살짝 어렵긴 했지만 ㅠㅠ 공부했다 치고 맞았습니다!! 음 메모리랑 시간은 ..

[실버 III] 1463. 1로 만들기

문제 https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 사용 언어 Python3 풀이 과정 처음엔 아래와 같이 또 재귀로 모든 경우의 수를 나눠 연산하려 했는데 숫자가 커지니 recursion error를 냈다.. 재귀 처음엔 어렵더니 계속 쓰게 되는데 DFS가 아니라면 안쓰도록 노력해봐야겠다. if x in count: return count[x] else: if x % 3 == 0 and x % 2 != 0: # 3의 배수만일 때 count[x] = 1 + min(makeOne(x//3), makeOne(x-1)) elif x % 2 == 0 and x %..