목록분류 전체보기 (281)
내 잡다한 노트
요새 전공수업에서 c++을 해야해서 c++ 연습할 겸 백준 문제를 풀면서 공부하는 중입니다. 이 문제는 단순한 이분탐색 문제입니다. 그런데 아무리해도 시간초과가 계속 나는거에요 ㅠㅠ 방법을 찾으러 30분동안 웹 서핑을 하던 도중... 답을 찾았습니다. #include #include #include using namespace std; bool binary_search(vector& n, int temp) { int low = 0; int high = int(n.size()) - 1; int mid; while (low > 1; if (temp == n[mid]) { return true; } if (temp > n[mid]) { low = mid + 1; } else{ high = mid - 1; } ..
웹 사용자에 대한 상태 정보를 저장하기 위한 것들이다. http의 stateless 특성을 해결한다. - 쿠키 쿠키는 서버가 웹브라우저에게 보내는 작은 데이터이다. 웹 브라우저는 이걸 저장해 다음 request를 할 때 헤더에 같이 보낸다. 이를 통해 서버는 클라이언트에 대한 정보를 기억할 수 있게 된다. 쿠키는 다양한 목적으로 사용될 수 있다. 사용자 로그인 정보, 장바구니, 기본 설정, 테마, 언어 설정 등과 같은 것들. 또, 사용자가 어떤 광고를 클릭했는지 등에 대한 정보도 서버에서 이용해 사용자에 맞는 정보를 줄 수 있다. 그래서 외국 웹사이트 들어가면 쿠키를 허용해달라는 팝업이 많이 뜬다. - 세션 주어진 시간 내에 클라이언트와 서버가 상호작용하는 것. 웹 세션은 로그인 상태나 기타 정보를 유지..
import datetime import time def my_timer(original_function): import time def wrapper(*args, **kwargs): t1 = time.time() result = original_function(*args, **kwargs) t2 = time.time() - t1 print(f'{original_function.__name__} 함수가 실행된 총 시간: {t2}초') return result return wrapper @my_timer def display_info(name, age): time.sleep(1) print(f'display_info({name}, {age}) 함수가 실행됐습니다.') def outer_func(calc:i..
# 심볼릭 링크 기능 비활성화 이 기능이 활성화돼있으면 웹 문서 경로 이외의 경로에 접근할 수 있다. /etc/apache2/apache2.conf 파일의 /var/www/ 안에 있는 Options Indexes FollowSymLinks에서 FollowSymLinks를 삭제해야한다. (리눅스 운영체제임) vi로 열었을 때 esc 키를 눌러 전환한 상태에서 /Indexes 를 엔터누르면 쉽게 해당 내용을 찾을 수 있다. 그렇게 하면 링크 기능 비활성화가 됐다. # 디렉터리 리스팅 비활성화 /etc/apache2/apache2.conf 파일의 Options Indexes를 None으로 수정한다. 여기서 None은 옵션이 없다는 의미이다. 이렇게 하면 서버 안에 있는 파일들이 노출되지 않는 것을 확인할 수 ..
웹 서버의 취약점보단 웹 애플리케이션의 취약점에서 웹 해킹 사고가 발생하는 경우가 가장 많다. 대표적인 것을 써본다. # SQL 인젝션 공격 대표적인 취약점으로, 웹 애플리케이션이 데이터베이스와 연동하여 SQL을 질의하는 과정에서 이뤄진다. 이를 이용해 주로 인증 과정을 우회하여 원하는 계정에 접근하거나 특정 명령어를 실행시킬 수 있다. ID에 admin, password에 1234를 넣으면 질의문은 다음과 같다 select id, pw, name, level from member WHERE id = 'admin' and pw='1234' 그런데, password에 ' or ''=' 를 넣고 하면 성공한다. 왜 그럴까? 바로 false AND false OR true 라는 논리연산이 돼서 최종적으로 tr..
# 디렉토리 리스팅 웹 서버에서 접속자가 디렉터리 구조나 파일명을 쉽게 파악하고 다운로드할 수 있게 하는 것이 목적이다. 이 때문에 취약점이라 보기 어렵다는 의견도 있으나, 공격자가 공격 대상인 웹 서버의 구조를 파악하여 정보를 수집할 수 있으므로 디렉터리 리스팅 설정을 활성화하는 것을 권장하지 않는다. 디렉터리 리스팅은 웹 서버를 기본으로 설치하고 별도의 보안 조치 없이 운영할 때 흔히 발생하며 공격자가 직접 임의의 위치에 접근하는 경우에 민감한 정보가 유출되는 문제가 발생할 수 있다. # 웹 서버 버전의 노출 공격자는 웹 서버의 버전을 확인하고 취약하다고 판단하면 취약한 웹 서버 버전의 익스플로이트를 활용하여 공격할 수 있다. 우분투는 오류 페이지에 웹 서버의 정보가 기본적으로 노출된다.
PAM(Pluggable Authentication Modules)의 약자로 인증 모듈이다. 리눅스 시스템에서 사용자의 인증을 담당하는 모듈. PAM은 네 가지 모듈로 구성돼있다. 1. authentication module : 비밀번호, 공개 키를 이용하여 사용자의 신원을 확인하는 모듈 2. account module : 계정 만료, 시간, 특정 서비스 접근 권한 등 인증 조건을 검사하는 모듈 3. password module : 비밀번호 갱신, 비밀번호 복잡도 등을 설정하는 모듈 4. session module : 사용자 세션의 시작부터 끝까지 가능한 작업을 정의하는 모듈 각 모듈을 활용해 root 접속 제한, 비밀번호 강도 설정, 비밀번호 만료 일자 등을 설정하여 사용자 계정의 보안을 강화한다. -..
방화벽(Firewall)은 외부에서 들어오는 패킷인 인바운드와 서버에서 나가는 패킷인 아웃바운드에 대한 정책을 설정하여 정책에 따라 패킷을 허가하거나 거부하는 방식으로 작동함. 리눅스 방화벽은 크게 리눅스 커널을 제어하여 실제 네트워크 패킷을 필터링하는 방화벽 처리부와 필터링 정책을 추가/제거하는 방화벽 제어부로 구성된다. 내가 사용하는 우분투 리눅스는 데비안 리눅스 기반으로 하는 ufw 방화벽 시스템을 사용한다. nftables 프레임워크에서 필터링을 진행한다. 패킷이 오면 여기서 필터링을 할 지 안 할지 결정함. sudo ufw status 명령으로 방화벽 서비스가 켜져 있는지 확인할 수 있다. sudo ufw enable 을 하면 방화벽이 활성상태가 된다. sudo ufw status verbose..