웹해킹 1차시 정리
HTML
HTML은 Hyper Text Markup Language의 약자이다.
이는 Hyper Text 기능을 가진 문서로 웹 페이지를 위한 마크업 언어다.

Opening tag는 여는 태그, Closing tag는 닫는 태그로 이 둘을 쓰는 이유는 Contents를 감싸기 위함이다.
흔한 웹사이트에서 개발자 모드로 요소들을 보면 거의 대부분이 이런 형식으로 구성되어 있다.
이러한 것들은 Front-end와 Back-end로 나뉘는데, Front-end는 사용자에게 보여지는 화면이고 Back-end는 사용자가 관리하지 못하는 서버나 데이터베이스를 관리하는 기술이다.

HTML, JS, CSS 등이 Front-end에 속한다.

php, django, RAILS 등이 Back-end에 속한다.
HTTP
HTTP는 Hyper Text Transfer Protocol의 약자이다.
이는 하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 프로토콜 (통신 규약)인데, 쉽게 말해 웹상에서 통신을 할 때 어떤 형식으로 통신을 하자고 정해놓은 약속이다.
프론트엔드 서버 ←→ 클라이언트 간의 통신
프론트엔드 서버 ←→ 백엔드 서버 간의 통신
두개의 다른서버가 통신을 하기 위해선 공통 언어가 필요하기에 HTTP를 통해 서로 전달 받을 언어를 정한 것이다.
이 HTTP의 구조는 '요청과 응답' 부분에서 다루겠다.
요청과 응답

사용자 클라이언트에서 인터넷을 통해 서버에 HTTP 요청(Request)을 보내면 서버에선 HTTP 문서 형식으로 응답(Response)을 다시 인터넷을 통하여 사용자 클라이언트에 보내준다.
HTTP가 요청과 응답의 형식으로 되어있다.
HTTP Request의 구조는 3개로 나뉜다.
- Starter line - 해당 요청이 url 어떤곳에 요청하는지 담는다.
- Headers - 해당 요청에 대한 추가 정보를 담고 있다.
- Body - 데이터가 담겨져 있는 부분이다.
HTTP Response의 구조 또한 3개로 나뉜다.
- Status line - Response의 상태를 나타내준다.
- Headers - Request의 Headers와 동일하나 여기서만 사용되는 헤더값들이 있다.
- Body - Response와 일반적으로 동일하다.
HTTPS
HTTPS(HTTPS Secure)는 HTTP Protocol의 암호화된 버전이다.
이는 클라이언트가 사용자 정보처럼 민감한 정보를 서버와 안전하게 주고받도록 한다.
요즘은 거의 모든 웹사이트가 HTTPS를 사용한다.
URL
URL(Uniform Resource Locator)은 인터넷에서 웹 페이지, 이미지, 비디오 등 리소스의 위치를 가리키는 문자열이다.

구조는 이렇게 되어있으며 보통 웹 주소, 또는 링크로 불린다.
쿠키, 세션
<쿠키>

쿠키 또는 세션은 HTTP 프로토콜의 특성이자 약점을 보완하기 위해서 사용된다.
HTTP는 stateless라는 특성을 가지고 있는데 이는 통신이 끝나면 상태를 유지하지 않는 특성이다.예를 들어 내가 온라인 쇼핑물에 방문하여 내 정보에 로그인 했더라도 페이지를 이동하게 되면 계속 로그인을 해줘야한다.
그러나 쿠키를 사용하게 되면 사용자의 정보를 저장하게 된다.서버에서 사용자에게 쿠키를 요청하고 만약 이를 수락하게 되면 사용자가 입력한 정보들을 유지해 준다.
쿠키의 구성요소
- 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 쿠키의 유지시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
쿠키의 동작
- 클라이언트가 페이지를 요청
- 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함 시켜 응답
- 브라우저가 종료되어도 쿠키 만료 기간이 있다면 클라이언트에서 보관하고 있음
- 같은 요청을 할 경우 HTTP 헤더에 쿠키를 함께 보냄
- 서버에서 쿠키를 읽어 이전 상태 정보를 변경 할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답
평소에 사이트에 방문하여 로그인 하고 나면 '비밀번호를 저장하시겠습니까?' 라는 문구가 뜨는데 이는 쿠키의 원리이다.
<세션>
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.
사용자 정보를 서버에 두기때문에 보안은 좋지만 사용자가 많아질수록 서버 메모리를 많이 차지한다.
세션의 동작
- 클라이언트가 서버에 접속 시 세션 ID를 발급 받음
- 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
- 클라리언트는 서버에 요청할 때, 이 쿠키의 세션 ID를 같이 서버에 전달해서 요청
- 서버는 세션 ID를 전달 받아서 별다른 작업없이 세션 ID로 세션에 있는 클라언트 정보를 가져와서 사용
- 클라이언트 정보를 가지고 서버 요청을 처리하여 클라이언트에게 응답
이렇게 보면 보안때문에 세션을 더 많이 선호할 법 하지만 보통 웹사이트의 사용자 수는 엄청나기에 쿠키가 아닌 세션을 쓰게 되면 메모리 때문에 서버의 속도가 매우 느려진다.
쿠키와 세션의 차이 또한 선명한데 쿠키는 클라이언트에 저장되지만 세션은 서버에 저장되기에 처리 속도 또한 쿠키가 훨씬 빠르다.그리고 쿠키는 파일로 저장되기에 브라우저가 종료되도 만료기간 전까지는 정보가 저장될 수 있다. 그러나 세션은 브라우저가 종료되면 뭐든 상관없이 바로 삭제되고 다른 브라우저를 사용하게 되면 다른 세션을 사용할 수 없다.
둘 다 작동원리는 비슷하더라도 엄연한 차이가 있기에 자세히 알고 사용하는게 가장 좋다.