웹(Web)

- 하이퍼텍스트(HyperText) 문서들이 인터넷(Internet)을 통해서 연결된 시스템

구성 : 프로토콜(HTTP, TCP/IP) + 주소 체계(URL) + 데이터 포멧(HyperText)

- 통신 프로토콜 : HTTP(HyperText Transfer Protocol)

- 콘텐트 : 하이퍼텍스트 문서들

-> 링크를 통해 다른 문서로 접근할 수 있는 문서 ex) HTML(HyperText Markup Language)문서

- 주소 체계 : URL(Uniform Resource Locator) : 하이퍼텍스트 및 이미지, 동영상 등의 자원을 접근하기 위한 주소

 

웹의 시작

- 정식 이름 : 월드-와이드 웹 (WWW : World Wide Web)

-> WWW또는 W3이라고도 불림

- 시작 : 1989년 유럽 입자 물리 연구소(CERN)

-> 전 세계 여러 대학, 연구기관에서 흩어져 일하는 물리학자들이 상호간의 신속한 정보교환, 공동연구를 위해 고안

 

HTTP에서의 통신 과정

- HTTP통신 프르토콜의 개요

-> 2대의 컴퓨터가 통신하는 경우 (한 쪽은 클라이언트, 다른 쪽은 서버)

-> 웹 브라우저(클라이언트)가 서버로 요청 메세지를 보내고 결과로 응답 메세지를 전달 받음

 

요청 메세지의 구성은 5가지로 되어있다.

- Get 메소드 구성

메소드, 요청 URL, 프로토콜 버전, 요청 헤더

- POST 메소드 구성

메소드, 요청 URL, 프로토콜 버전, 요청 헤더, 요청 바디(메소드 GET이면 생략)

 

구성요소 1 : 메소드 - 서버가 수행해야 할 동작 정의

GET - 서버가 자원을 전송해 줄 것을 요청

POST - 요청 바디를 통해 클라이언트가 서버로 데이터 전송

HEAD - 서버가 (자원 내용은 전송x)헤더만 전송해 줄 것을 요청

OPTIONS - 서버가 지원하는 메소드를 질의

TRACE - 클라이언트가 보낸 요청을 그대로 반환

PUT - 클라이언트가 서버의 지정한 URL로 자원을 전송

DELETE - 서버의 자원을 삭제

CONNECT - 프록시 터널링을 위해 예약된 메소드

 

구성요소 2 : URL
- 상대 경로 및 절대 경로로 요청 가능

상대 경로 : /content.php

절대 경로 : GET http://www.infinitybooks.co.kr/content.php HTTP/1.1 

 

구성요소 3 : 프로토콜 버전

- HTTP 프로토콜 이용하여 통신을 할 때 사용하는 버전 정의

버전

- HTTP/0.9 : 최초 정식 버전(1.0) 이전 버전이라 0.9라고 부른다. GET 메소드만 지원하며 헤더 부분X

- HTTP/1.0 : 1996년 5월에 공개된 최초의 정식 버전 RFC1945로 정의

- HTTP/1.1 : 1997년 1월에 공개, 현재 가장 일반적으로 사용되는 버전

- HTTP/2.0 : HTTP/1.1과 호환성을 유지하며 연결의 다중화와 헤더의 압축 등 통신을 보다 효율적으로 하려고 개발됨

 

구성요소 4 : 헤더

- 요청 시에 필요한 조건, 특성 등을 나타내는 필드

필드 종류 Host, Content-Type, Keep-Alive

 

구성요소 5 : 요청 바디

- 클라이언트가 서버로 보내는 추가적인 데이터

- POST 메소드를 사용할 경우 추가

- 다양한 포맷의 데이터가 추가 가능

-> 폼에 기입한 이름 혹은 주소

-> 첨부파일과 같은 바이너리 파일 등

 

HTTP 응답 메세지도 5가지 요소로 구성

1. 프로토콜 버전 : 서버가 사용하는 HTTP 버전

2. 상태 코드

3. 상태 코드 설명

- 상태 코드 및 상태 코드 설명

100~199 정보 전송 (요청 받아 계속 처리 중)

200~299 성공 (200 : OK, 201 : Created-PUT메소드에 의해 파일이 서버에 생성, 202 : 요청 수락, 204 : 바디에 데이터X)

300~399 리다이렉션 :  요청을 처리하기 위해 클라이언트가 다른 URL로 이동

400~499 클라이언트 오류 (401 : 요청 메세지 문법 오류, 402 : 인증 오류, 403 : 접근 차단, 404 : 자료가 없음) 

500~599 서버 오류 (500 : 서버 내부 오류 발생, 501 : 요청 메소드 수행 불가, 502 : 잠시 서비스 사용 불가)

4. 응답 헤더 - 전달한 데이터의 형식과 길이 등의 메타 정보

5. 응답 바디 

 

HTTP 특징

- HTTP는 비연결지향 프로토콜

- 클라이언트가 요청을 서버로 보내면 서버는 클라이언트에게 요청에 맞는 응답을 보내고 접속을 끊음

- 성능상 비효율적 -> 클라이언트 요청마다 접속을 새로함

- 프로토콜 상의 개선

HTTP/1.0 : 한 번의 접속으로 여러 개의 요청과 응답 반복 가능

HTTP/1.1 : 특정 시간동안 접속을 계속 유지하며 요청 보낼 수 있는 기능 추가->Keep-alive 기본 사용 

- HTTP는 상태 정보 유지안함 프로토콜 -> 상태 정보 저장해야 할 경우 쿠키와 세션 사용

->쿠키 : 클라이언트에 저장되는 키와 값이 들어있는 작은 데이터 파일(로컬에 저장했다 참조)

->세션 : 서버는 일정 시간 동안 같은 클라이언트로부터 전달되는 요청들을 하나의 그룹으로 보고 하나의 세션으로 식별

=> 클라이언트가 서버로 최초 요청을 보내면 유일한 식별자(ID)인 세션 ID 부여

 

HTML 문서 생성

- 정적인 콘텐트 : 내용 변경 X -> 웹 서버는 파일을 읽어 그 내용 전송

- 동적 콘텐트 : 사용자 상황, 요청에 따라 내용이 변경

-> 서버 사이드 스크립트 언어(SSL : Server-side Script Language) ex) JSP,ASP,PHP

-> 웹 서버가 SSL로 작성된 페이지를 내부적으로 실행 -> 실행 결과 HTML 문서 전송

 

입력 파라미터의 전달

- GET 메소드 사용 : 보안적으로 권장하지 않음 (요청 파라미터가 요청 URL에 포함 -> 사용자에게 노출)

- POST 메소드 사용 : 보안적으로 우수 (파라미터 정보다 요청 바디에 포함 -> 사용자에게 노출X)

 

클라이언트 사이드 스크립트 (CLS : Client-side Script Language)

- 정적 혹은 동적 방식으로 구해진 HTML 문서는 웹 브라우저로 전달

-> 클라이언트 웹 브라우저에서 실행되는 스크립트 (동적으로 화면 내용 만들거나 다양한 UI제공)

ex) JS(Java Script), VBS(Visual Basic Script) 등

- HTML 문서에 포함되어 동작

 

CLS와 SSL 사용 예

SSL은 웹서버에서 실행 -> 실행 결과 HTML 문서 전송 -> CSL은 웹브라우저에서 실행

 

URI(Uniform Resource Identifier) : 인터넷의 특정 자원에 접근하기 위한 식별자

- HTTP로 접근 할 수 있는 자원인 경우 http 사용

- 이러한 식별자 스키마 : https, mailto, ws, file 등이있다.

- URI : 리소스를 식별하기 위한 문자열 전체를 표시

- URL(Uniform Resource Locator) : 자원의 위치(네트워크 상의 위치)

즉, URL은 URI의 하위 집합 (www.naver.com)과 같이 특정 서버를 표시 (일반적으로 URL이라 부름)

URI : http://www.infinitybooks.co.kr/content.php 

URL : http://www.infinitybooks.co.kr 

 

URI 형식 : 절대 URI, 상대 URI

- 절대 URI : 필요한 정보 전체를 나타내는 방식

- 상대 URI : 현재 있는 위치의 URI 부터 '/image/logo.gif'와 같이 상대적 위치를 지정

ex) http(스키마 이름)://user1:password@(인증 정보)www.infinitybooks.co.kr(서버 호스트 이름, IP 주소):80(포트 주소)/Info/index.php(계층적 파일 경로)?uid=1(질의 문자열(파라미터))#ch1(단편 식별자)

 

- 스키마 이름 : http 또는 https 등 어떤 프로토콜을 사용할지 지정

- 자격(인증) 정보 : 서버에서 자원을 취득하는데 필요한 사용자 이름과 패스워드 등의 자격 정보(생략 가능)

- 서버 호스트 이름 혹은 IP 주소 : FQDN(Fully Qualified Domain Name)형식의 이름을 지정할 수 있고, 경우에 따라 193.0.1.1과 같이 IP 주소 사용

- 서버 포트 번호 : 네트워크의 포트 번호로 선택 사항, 생략 시 기본 포트 번호 사용

- 계층적 파일 경로 : 요청하는 자원의 경로를 말하며 UNIX의 디렉터리 지정 방법과 유사

- 질의 문자열(Query String) : 임의의 매개변수를 전달하기 위한 목적(생략 가능)

- 단편 식별자 : 취득한 자원에서 그 하위에 있는 특정 부분을 #등으로 가리키는 것 (선택 사항)

 

퍼센트 인코딩

- URI에서 사용할 수 없는 문자를 표현할 때 사용되는 인코딩 방식 (URL 인코딩)

- RFC3986에 정의

- 대상 문자를 바이트 단위로 나뉘어 '%xx'(xx는 16진수) 형태로 표시

- 예외 (HTTP의 POST 메소드 사용)

 

웹 취약점 스캐너

- 웹 사이트 취약점을 점검하는 프로그램, 문제에 대한 해결 방안 제시

 

스캔시작

- 크롤링(Crawling) : 시작 주소 페이지에 연결된 링크들을 이용하여연결된 홈페이지 모두 검사

-> 크롤링을 위한 로그인 정보 입력 -> 취약점 검사 결과

 

OWASP(The Open Web Application Security Project)

- 비영리 국제 단체, 웹 서버 보안과 관련하여 가장 공신력 있는 기관 중 하나

 

취약점 1 : SQL 인젝션(SQL Injection)

- 데이터베이스 관련된 보안 취약점 : 사용자가 입력하는 입력 값에 대해 유효성 검증없이 사용시 발생

대책 1 : 매개변수 바인딩 기법 사용 (질의문 변조가 발생하지 않음)

-> 사용자가 입력한 ID와 PW값이 별도의 매개변수로 전달

대책 2 : 입력 값에 대한 특수문자 검증

-> 사용자 입력에 특수문자 포함되어 있는지 검사, 허용되지 않은 문자열, 문자 포함시 제거

ex) MS SQL Server와 Oracle의 주석문 --, MySQL의 주석문 :#

 

취약점 2 : 경로 조작

- 사용자가 입력하는 입력 값에 대한 유효성 검증없이 그대로 사용할 경우 발생할 수 있는 서버 시스템 자원 접근에 대한 보안 취약점

- 사용자가 접근해서 안되는 서버의 중요 파일을 내려받거나 삭제 가능

대책 : 입력 값에 대한 특수문자 검증

 

취약점 3 : 위험한 형식의 파일 업로드

- 유효성 점검의 대상이 사용자가 업로드 하려는 파일

- 웹 셀 : 사용자가 올린 파일이 웹 서버에 실행되며 보안 공격자가 외부에서 웹 서버를 통해 서버를 원격 조종하는파일

-> 파일 확장자 : .asp, .jsp, .php 등

대책 : 

1. 화이트리스트 방식의 허용된 확장자만 업로드 허용

2. 서버에 파일을 저장할 때 파일 이름과 경로를 임의의 문자열로 변경하여 저장

3. 파일 저장 경로가 웹 서버의 문서 디렉터리 아래가 아니라 전혀 다른 곳을 ㅗ설정

 

취약점 4 : 크로스사이트 스크립트

- 웹 브라우저에서 사용자가 입력하는 입력 값에 대해 유효성 검증없이 웹 서버로 전송 시 발생할 수 있는 보안 취약점

-> 일반적으로 자바스크립트에서 주로 발생하지만 VB 스크립트, Active X등 클라이언트에서 실행하는 동적데이터를 생성하는 모든 언어에서 발생 가능

- 크로스사이트 스크립트(Cross-Site Script)

-> 악성 스크립트를 웹 서버에 저장, 이렇게 저장된 악성 스크립트는 같은 웹 서버에 접속한 다른 사용자들에게 배포

=> (추가 사고)

대책 : 입력 값에 대한 특수문자 검증

ex) 원본 문자 < -> 대체 문자 &lt;

 

취약점 5 : 적절한 인증 없는 중요 기능 허용 (로그인 X)

- 적절한 인증없는 중요 기능 허용 : 인증 점검 없이 바로 비즈니스 로직 수행하면 발생

- 인증 : 요청을 보낸 사용자가 시스템의 사용자 맞는지 확인 (계정 관리가 이런 인증에 한 부분이다)

-> 인증 점검 로직이 필요하다.

취약점 6 : 부적절한 인가 (로그인 O -> 이후 인가를 점검 하지 않음)

- 적절한 인가 점검 없이 비즈니스 로직 수행

- 인가  : 사용자의 자원에 대한 접근 또는 사용을 허용하는 과정

-> 인가 점검 로직 필요

 

취약점 7 : 중요 정보 평문 저장/전송과 취약한 암호화 알고리즘 사용

- 파일, 데이터베이스 또는 메모리에 중요 데이터 저장 -> 반드시 암호화 하여 저장

 

웹 서비스는 최소 권한 사용자로 운영 해야 한다.

디렉터리 검색은 막아야한다.

불필요하게 설치된 파일 제거

파일 업로드 및 다운로드 최대 크기 설정

IIS의 WebDAV 서비스 비활성화

로그 관리를 해야한다.

'학교수업' 카테고리의 다른 글

객체지향 프로그래밍 10주차  (0) 2021.11.22
웹프로그래밍 12주차  (0) 2021.11.21
정보보호개론 10주차  (0) 2021.11.18
가상현실프로그래밍 11주차  (0) 2021.11.18
가상현실프로그래밍 10주차  (0) 2021.11.17

+ Recent posts