오늘은 내가 입력한 정보(예: 아이디, 패스워드)가 어떻게 서버에 전달되는지, 그 방법을 살펴보겠습니다. 사실 원리는 간단하지만, 의외로, 2000년대 초반만 하더라도 이 원리를 조금 응용해서 해킹 아닌 해킹이 이루어지기도 했었답니다.

 

우리가 웹 브라우저를 통해 인터넷을 사용할 때, 내 컴퓨터와 서버는 무조건 아래와 같은 방식으로 데이터를 주고 받게 됩니다.

 

 

이야기 드린 것과 같이, 주고받는 데이터의 기본적인 형태는 아래와 같은 형태로 동작합니다. 예를 들면, 사용자가 구글로 요청(Request) 메시지를 보내면, 구글은 해당되는 HTML 페이지를 응답(Response) 하는 형태입니다.

 

 

사용자가 보내는 요청(Request) 메시지를 해석하면 다음과 같습니다.

 

 

그렇다면 아래와 같은 경우,요청 메시지는 어떤 모습일까요?

 

 

이 경우에도 메시지는 크게 다르지 않습니다. 예를 들어, 철수가 이메일과 비밀번호를 입력하고 로그인 버튼을 누르는 순간 브라우저는 이메일과 비밀번호를 포함한 GET 메시지를 아래와 같이 조립해서 서버에 전달합니다.

 

 

요청 메시지는 조금 전에 살펴본 것과 유사하지만, 다른 점이 있다면, 페이지 이름 뒤에 물음표(?)가 붙은 후에, 전달하려고 하는 값들이 AND(&)로 연결됩니다. 조금 더 자세하게 살펴보면, 위의 값1, 값2의 내용은 아래와 같습니다.

 

값(name)

내용(value)

email

chulsoo

password

chulchul

 

서버는 이 값들을 바탕으로, 올바른 사용자인지 아닌지 판단한 후, 아이디와 패스워드가 정확하다면, 사용자를 로그인 시킵니다.

이러한 메시지 전달 방식은 다양한 곳에 쓰이게 되는데, 예를 들면, 클리앙에서 게시물을 클릭하였을 때, 보여지는 화면은 아래와 같습니다.

 

 

위 페이지에서 브라우저 주소 창의 값은 이렇게 생겼습니다. 형태는 아까 보신 것과 똑같습니다. :)

 

이 주소 값은 서버에게 하단의 두 개 값을 전달한 결과라는 것을 알 수 있습니다.

 

값(name)

내용(value)

bo_table

news

wr_id

1311656

 

두 값이 무엇을 의미하는지는 쉽게 짐작할 수 있습니다. bo_table는 게시판 종류를 (news), wr_id는 게시물 번호(1311656)를 나타냅니다. 그래서, 웹 브라우저 주소 창에서 wr_id만 다른 번호로 바꾸어 주시면, 바로 다른 게시물을 보는 일도 가능합니다.

 

이미 많은 분들이 알고 있겠지만, 위와 같은 방법을 조금 응용하면 금지된 몇 가지의 일들도 가능합니다. 예를 들어 수강신청 확인 페이지에서 F11을 눌러서 주소 창이 보이게 한 다음에 내 학번 부분을 다른 사람의 학번으로 고치면 친구의 수강신청 내용을 볼 수 있게 되거나, 영어 시험 점수 확인 사이트에서 다른 사람의 등록 번호를 넣으면 그 사람의 시험 성적이 보이게 되기도 합니다. 심지어 인터넷 초창기의 외국 쇼핑몰들은 위의 방법들을 응용하면 해킹 아닌 해킹도 가능했다고 합니다. 물론 지금은 많은 사이트에서 이런 방법을 막아놓았습니다.

 

위와 같은 문제를 방지할 수 있는 가장 쉬운 방법은 메시지를 보낼때 GET이라는 방법이 아니라 POST라는 방법으로 보내는 것입니다. 이런 경우 브라우저는 값을 숨긴 채로 서버에 내용을 보내게 됩니다.

[POST 방법으로 보내기 위해서는, 단순히 HTML 소스 코드에서 메시지 보내는 부분을 POST로 설정하면 됩니다.]

 

 

POST의 경우에 실제로 전달되는 메시지는 아래와 같습니다.

 

 

방금 살펴본 방법과 유사하지만, 자세히 보시면, 메시지의 맨 앞에 보이는 부분이 GET에서 POST로 바뀌었고, 전달 값들은 하단에 따로 적혀져 있게 됩니다. 이와 같이 POST를 사용해서 메시지를 보내게 되면, 웹 브라우저 주소 창에는 어떤 메시지를 보내는지 보이지 않기 때문에, 사용자는 이 값들을 직접 조작할 수 없습니다.

 

그럼에도 불구하고, 위와 같은 방법도 사실은 메시지가 다 보이기 때문에 안전하지는 않습니다. 그런 이유로, 최근에는 중요한 메시지는 내용을 아예 암호화 해서 보내는 방법이 선호됩니다 :)

 

다음시간에는 인터넷 상에서 데이터를 저장하는 방법인 쿠키에 대해서 알아보도록 하겠습니다.

Posted by kkckc
,