
인터넷 초기에는 데이터 교환에 신뢰성이 없었다. 전쟁 중에, 오프라인 상태가 돼도 정보를 계속 교환할 수 있도록 원격 컴퓨터를 연결할 수 있는 방법을 찾았고, 네트워크 엔지니어들은 컴퓨터들 간의 신뢰할 수 있는 정보 교환을 보장하는 전송 제어 프로토콜 (TCP)를 개발했다.
컴퓨터가 TCP로 다른 기계에 메시지를 보낼 때 메시지는 목적지 주소와 함께 데이터 패킷으로 이루어지는데, 수신 시스템이 패킷을 받으면 프로토콜은 패킷을 순서 번호에 따라 재사용할 수 있는 순서로 조립하고, 패킷을 받았다는 수신을 보낸다. 송신자는 패킷을받았다는 메시지를 수신하지 못하면 다른 네트워크 경로를 따라 해당 패킷을 재전송하고, 이런 방식으로 데이터를 주고받게 된다.
인터넷상의 데이터 패킷은 인터넷 프로토콜 (IP) 주소로 전송되며, 이 주소는 국제도메인관리기구에서 지역에 블록을 할당한 것에서 나누어서 주어진다. IP 주소는 기억하기 어렵기 때문에, 도메인을 이용하는데, 이 때 DNS를 이용해 도메인 이름을 IP 주소로 변환할 수 있다.
매번 브라우저를 접속할 때, IP 주소를 찾는다면 시간이 오래 걸리기 때문에, 결과를 캐시하여 빠르게 접속하게 된다. 이 과정은 DNS 캐시 포이즈닝이라는 유형의 공격을 가능하게 하며, 로컬 DNS 캐시가 의도적으로 손상되어 공격자가 제어되는 서버로 데이터를 라우팅하는 위험이 있다.
TCP는 두 대의 컴퓨터가 안정적으로 데이터를 교환할 수 있도록 하지만, 전송되는 데이터의 해석에 관여하진 않는다. 따라서 애플리케이션 계층 프로토콜을 이용하는 데 동의하게 된다. TCP 위에 구축되는 프로토콜을 애플리케이션 계층 프로토콜이라고 하며, 이것의 한 종류가 웹 서버가 사용하는 HTTP이다.
HTTP 통신에서 사용자 에이전트는 특정 자원에 대한 요청을 생성하며, 웹 서버는 자원에 대한 요청을 예상하여 요청된 자원 또는 요청을 이행할 수 없는 결과 오류 코드를 반환한다.
HTTP 요청은 사용자 에이전트가 서버가 수행하기를 원하는 동작인 메서드 (Method), 가져오는 자원을 나타내는 URL, 예상하는 콘텐츠 유형 또는 응답 수신여부와 같은 메타데이터인 Header, 그리고 추가로 서버가 전송해야 하는 데이터인 Body로 구성된다.
HTTP 응답은 프로토콜 설명, 상태 코드, 상태 메시지로 시작되는데, 2XX로 포맷된 상태 코드는 해당 질문이 이해, 승인, 응답됐음을 나타낸다. 3xx로 포맷된 코드는 클라이언트를 다른 URL로 리다이렉트한다. 4XX로 포맷된 코드는 브라우저가 잘못된 요청을 생성했을 때 클라이언트 오류를 나타낸다. 5XX로 포맷된 코드는 요청은 유효했지만 서버는 요청을 이행할 수 없을 때 반환된다. 이후 HTTP 헤더에선 메타데이터를 포함하고, 그 다음 클라이언트가 액세스 하려고 했던 HTML, 스타일링에 사용되는 자바스크립트 코드, CSS 또는 본문 내 이진 데이터를 기술한다.
인터넷 초기에는 페이지가 대부분 읽기 전용이었기 때문에 어떤 사용자 에이전트가 요청하는지 구분할 필요가 없었다. 그러나 현대의 웹사이트에선 사용자들이 로그인하고 사이트에 방문해 상호작용하는 일이 늘어나면서, 사용자의 활동을 추적할 필요가 생겼다. 이를 허용하려면 HTTP 통신 상태가 지속적으로 유지되어야 하고, 핸드셰이크를 수행하여 패킷을 계속 주고받게 된다. 따라서 HTTP 세션을 설정하게 되는데, 쿠키에 포함된 세션 정보는 해커에게 사용자인 척 사칭할 수 있는 공격 대상이 된다.
웹이 처음 발명됐을 때는 HTTP 요청과 응답은 데이터 패킷을 가로채는 모든 사람이 읽을 수 있는 일반 텍스트 형태로 보내졌지만, 최근에는 전송 중인 메시지를 인코딩해 암호화하여 공격으로부터 사용자를 보호한다. 이 때 서드 파티가 가로챈 패킷이 적절한 암호화 키 없이 해독될 수 없도록 하는 암호화 방식인 TLS를 사용한다. TLS를 이용한 HTTP 통신을 HTTP Secure라고 하며, HTTPS는 클라이언트와 서버가 암호화 방식을 쌍방이 합의하고 암호화 키를 교환하는 TLS 핸드셰이크를 수행하도록 한다.
'Book' 카테고리의 다른 글
웹 개발자를 위한 웹 보안: 4장 요약 - 웹 서버 작동 방식 (3) | 2024.09.15 |
---|---|
웹 개발자를 위한 웹 보안: 3장 요약 - 브라우저 작동 방식 (1) | 2024.09.15 |
웹 개발자를 위한 웹 보안: 1장 요약 - 웹사이트를 해킹하다 (0) | 2024.09.14 |
쉽고 빠르게 익히는 실전 LLM - CHAPTER 8. 고급 오픈 소스 LLM 파인튜닝 (0) | 2024.05.03 |
쉽고 빠르게 익히는 실전 LLM - CHAPTER 7. 파운데이션 모델을 넘어서 (0) | 2024.05.02 |