🎁 self-study

    [웹 해킹 & 시큐어 코딩] 02. SQL Injection

    🔥 웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩 위아래 1줄씩 띄우고 중요한 부분은 볼드 효과 📍 SQL Injection이란 무엇인가? 👉🏻 SQL(구조화된 질의 언어) Injection(주입): 구조화된 질의 언어를 주입하는 공격 👉🏻 웹 해킹의 일등공신 📍 취약점 발생 원인 👉🏻 공격자가 SQL 구문을 주입 > 입력값 검증 없이 구문 조합 > 사용자의 입력값 + 미완성된 SQL 구문 > 완성된 SQL 구문 > DB 질의 요청 > 결과에 따른 동작 구문 String id = request.getParameter("id"); String sql = "select * from employee where id = '" + id + ""; 라는 구문에서 공격자가 id값으로 ' 1=1..

    [웹 해킹 & 시큐어 코딩] 01. 웹 해킹에 대한 이해

    🔥 웹 개발자와 정보보안 입문자가 꼭 알아야 할 웹 해킹 & 시큐어 코딩 위아래 1줄씩 띄우고 중요한 부분은 볼드 효과 📍 웹 해킹 👉🏻 웹 서비스상에서 발생될 수 있는 모든 보안 허점을 이용해 악의적인 행위를 하는 것 👉🏻 어플리케이션: jsp, hph, asp, aspx 등 웹 브라우저를 통해서 접속하는 것들 📍 방화벽 도입이 웹 해킹 확산의 원인! 👉🏻 방화벽을 도입하면서 '웹' 해킹에 주목됨 👉🏻 원인: OSI7 레이어 중 방화벽은 4단계(포트 등)까지 확인하는데 대외 서비스가 필요하지 않은 SSH, TELNET, SFTP 등에 대해 방화벽을 세워 접근을 막음으로써 공격자는 자연스럽게 웹을 공격하게 됨 📍 웹 해킹을 통한 피해 영역 👉🏻 랜섬웨어를 사용하여 사용자의 개인정보를 이메일 열람, 인사 ..

    [HTTP] 섹션 6. HTTP 상태코드

    🔥 모든 개발자를 위한 HTTP 웹 기본 지식 섹션6. HTTP 상태코드 📍HTTP 상태코드 소개 ✅ 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려 주는 기능 👉🏻 1xx (Informational): 요청이 수신되어 처리 중 (거의 사용되지 않음) 👉🏻 2xx (Successful): 요청 정상 처리 👉🏻 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 👉🏻 4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 👉🏻 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함 ✔️ 만약 모르는 상태 코드가 나타나면? 👉🏻 클라이언트가 인식할 수 없는 상태 코드를 서버가 반환하면 상위 상태코드로 해석해서 처..

    [HTTP] 섹션5. HTTP 메소드 활용

    🔥 모든 개발자를 위한 HTTP 웹 기본 지식 섹션5. HTTP 메소드 활용 📍 클라이언트에서 서버로 데이터 전송 ✔️ 데이터 전달 방식 1) 쿼리 파라미터를 통한 데이터 전송 👉🏻 GET 👉🏻 주로 정렬 필터(검색어) ✔️ 데이터 전달 방식 2) 메시지 바디를 통한 데이터 전송 👉🏻 POST, PUT, PATCH 👉🏻 회원가입, 상품 주문, 리소스 등록, 리소스 변경 1️⃣ 정적 데이터 조회 GET /static/star.jpg HTTP/1.1 Host: localhost:8080 HTTP/1.1 200 OK Content-Type: image/jpeg Content-Length: 34012 lkj123kljoiasudlkjaweioluywlnfdo912u34ljko98udjklaslkjdfl;qkaw..

    [HTTP] 섹션4. HTTP 메소드

    🔥 모든 개발자를 위한 HTTP 웹 기본 지식 섹션4. HTTP 메소드 📍 HTTP API를 만들어 보자 👉🏻 요구사항: 회원 정보 관리 API를 만들어라! 1) 회원 목록 조회 2) 회원 조회 3) 회원 등록 4) 회원 수정 5) 회원 삭제 ✅ API URI 설계 👉🏻 회원 목록 조회 /read-member-list 👉🏻 회원 조회 /read-member-by-id 👉🏻 회원 등록 /create-member 👉🏻 회원 수정 / update-member 👉🏻 회원 삭제 /delete-member 🤔 이것이 좋은 설계일까? ❗️ 가장 중요한 것은 리소스 식별 ✅ API URI 고민 👉🏻 URI(Uniform Resource Identifier) 🤔 리소스의 의미는 뭘까? ❗️ 회원을 등록하고 수정, 조회하..

    [HTTP] 섹션3. HTTP 기본

    🔥 모든 개발자를 위한 HTTP 웹 기본 지식 섹션3. HTTP 기본 📍 모든 것이 HTTP 👉🏻 HyperText Transfer Protocol - 하이퍼텍스트를 통해 문서를 보낼 수 있는 프로토콜 👉🏻 처음에는 텍스트 파일만 사용했지만 지금은 JSON, XML(API), 음성, 영상 등 거의 모든 형태의 데이터 전송 가능 👉🏻 서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용! ✅ HTTP 역사 👉🏻 HTTP/0.9 1991년: GET 메소드만 지원, HTTP 헤더가 없음 👉🏻 HTTP/1.0 1996년: 메소드, 헤더 추가 👉🏻 HTTP/1.1 1997년: 가장 많이 사용되며 우리에게 가장 중요한 버전 RFC2068 (1997) - RFC2616 (1999) - RFC7230~7235 (20..

    [HTTP] 섹션2. URI와 웹 브라우저 요청 흐름

    🔥 모든 개발자를 위한 웹 HTTP 기본 지식 섹션2. URI와 웹 브라우저 요청 흐름 📍 URI(Uniform Resource Identifier, 리소스를 식별하는 통합된 방법) 👉🏻 URI? URL? URN? 👉🏻 URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있음 URI URL(Resource Locator) URN(Resource Name) 리소스 위치를 지정 리소스에 이름을 부여 - 위치는 변할 수 있지만 이름은 변하지 않음 ex) urn:isbn:8960777331(어떤 책의 isbn URN) - URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않음 - URI = URL로 이해해도 무리 없음! 👉🏻 Uniform: 리소스를 식별하는 통일된 ..

    [HTTP] 섹션 1. 인터넷 네트워크

    🔥 모든 개발자를 위한 HTTP 웹 기본 지식 섹션1. 인터넷 네트워크 📍 인터넷 통신 👉🏻 컴퓨터 2대가 서로 케이블에 연결되어 있다면 바로 메시지를 보낼 수 있음 👉🏻 하지만 컴퓨터 2대가 물리적으로 아주 먼 곳에 존재한다면, 인터넷을 사이에 두고 통신을 할 때 아주 많은 서버를 거쳐야 함 🤔 바로 인터넷 프로토콜(IP)를 이용해서! 📍 IP(인터넷 프로토콜) 👉🏻 IP 주소를 이용한 인터넷 규칙 👉🏻 클라이언트(보내는 사람)도 IP 주소가 있어야 하고, 서버(받는 사람)도 IP 주소가 있어야 함 👉🏻 패킷(packet)이라는 통신 단위로 데이터를 전달함 Client(요청) 👉🏻 전송할 메시지를 IP 패킷 정보(출발지 IP, 목적지 IP, 기타...)에 감싸서 보냄 Server(응답) 👈🏻 전송할 메..

    [자료 구조와 알고리즘] 동적 프로그래밍 - 타뷸레이션

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 동적 프로그래밍 - 타뷸레이션 📍 타뷸레이션(Tabulation) 👉🏻 분할 정복을 하기 위한 하향식 계산 방식: 메모이제이션 👉🏻 함수 하나를 사용하는 것보다는 오버 헤드가 큼 👉🏻 상향식 계산으로 계산에 필요한 모든 값을 전부 계산 후 테이블에 저장해 둘 것 // 구하고 싶은 수의 자릿수를 매개변수로 받음 function fibonacci1(n) { if(n == 0 || n == 1) return n; // 기저 조건 return fibonacci1(n - 2) + fibonacci1(n - 1); } function fibonacci2(n, memo) { // 메모이제이션 if(n == 0 || n == 1) return n; // 객체에 해당 값의 ..

    [자료 구조와 알고리즘] 동적 프로그래밍 - 메모이제이션

    🔥 그림으로 쉽게 배우는 자료 구조와 알고리즘 동적 프로그래밍 - 메모이제이션 📍 메모이제이션의 필요성 👉🏻 재귀를 이용해 큰 문제를 작은 문제로 분할 정복을 이용하여 풀어 왔음 👉🏻 하지만 재귀를 사용하면 스택에 함수를 쌓는 단점 이외에도 이미 계산한 것을 또 계산하게 되는 치명적인 단점이 있음 // 피보나치 수열 // 앞의 두 수를 더한 수를 뒤에 나열 1, 1, 2, 3, 5, 8, 13, 21, 34, ... [ fibonacci.mjs ] // 구하고 싶은 수의 자릿수를 매개변수로 받음 function fibonacci(n) { if(n == 0 || n == 1) return n; // 기저 조건 return fibonacci(n - 2) + fibonacci(n - 1); } console...