웹 해킹/웹 기초 지식

자원을 지정하는 URL

Security Engineer 2024. 11. 6. 22:00

URL 개념

URL(Uniform Resource Locator) = 통합 자원 지시자

인터넷의 리소스를 가리키는 표준 명칭으로 서버의 자원을 요청할 때 사용된다.

URL로 인터넷 상의 모든 리소스를 요청할 수 있으며, 우리가 흔히 알고 있는 HTTP 뿐만 아니라 FTP, SMTP 관련된 자원 요청도 가능하다.

그림1 - URL 사용한 클라이언트/서버 통신

 

 

동작 원리(1)

URL로 자원 요청 시 동작 원리는 아래와 같다.

그림2 - logo.png 파일 요청

1. 클라이언트에서 URL로 자원 요청 - HTTP Request

2. 웹 서버에서 URL에 해당하는 자원을 Body 에 담아서 반환 - HTTP Response

 

 

 

URL 구조 분석

 

그림3 - URL 구조 분석

[01] 스키마

- 사용하게 될 프로토콜이 명시되어 있는 부분으로 위의 URL은 http 프로토콜을 통해 자원을 요청한다. 그 외에도 https, ftp, file 등이 있다. 해당 부분은 알파벳으로 시작해야 되며 대소문자를 가리지 않는다. 프로토콜 뒤에 콜론 ':'이 붙는다.

 

[02] 호스트(서버 주소)

- 자원을 가진 컴퓨터의 위치가 명시되어 있다. 웹 브라우저에서는 이를 참조하여 IP주소를 알아낸다. 뒤에 포트번호가 원래는 표기가 되어 있어야하나, HTTP는 기본 80포트를 사용하며 생략이 가능하다. 따라서 생략이 되어 있는 경우는 80포트를 사용한다고 볼 수 있다. 80포트가 아닌 다른 포트번호를 사용할 경우 표시를 해줘야 한다.(ex. 8080)

 

[03] 자원이 존재하는 디렉터리

- 이보다 상위 디렉터리에 자원이 존재할 경우 디렉터리는 표기되지 않는다.

 

[04] 요청할 자원의 이름

 

 

 

동작 원리(2)

자원을 지정하지 않을 경우 서버의 어떤 자원이 호출될까?

그림4 - index.jsp 반환

네이버 접속 시 naver.com으로 요청하게 된다. 이때 네이버의 웹 서버 or WAS에서는 사전에 설정해둔 기본 페이지(index 페이지)를 반환하게 된다. IIS의 경우 default 페이지도 호출된다. - 설정을 통해서 변경 가능하다.

도메인만 명시되어 있고, 자원은 명시되지 않는 경우 기본 페이지(index 페이지)를 호출한다.

 

 

 

URL 예약 문자(메타 문자)

URL 상에서 특정 기능을 하는 문자로 웹 클라이언트와 서버 간에 서로 예약이 되어 있는 문자이다.

문자 인코딩
? 파라미터가 시작된다는 것을 알려줌 (자원과 사용자 입력값 구분의 기준)
= 파라미터 값 대입
& 다음 파라미터 식별자
+ 공백
# 뒤에 오는 모든 것 제거
! * ( ) ; : @ $ , / [ ] 그 외 문자...

 

URL 예시

http://www.example.com/board.do?val1=test&val2=test+is

 

 

 

URL 구조 분석

그림5 - URL 구조 분석

 

 

 

 

데이터에 URL 예약 문자가 들어갈 경우 어떻게 전송될까?!

그림6 - 데이터에 URL 예약 문자가 있는 경우

그림6 처럼 전송되지 않는다. cre 뒤에 &#는 데이터로 인식하지 않는다.

 

 

URL 인코딩

URL 상에서 문자를 표현하는 방법으로 데이터 전송 상에 손실을 막기 위해서 인코딩을 사용한다.

또한, 예약 문자를 단순 데이터로 전송이 될 수 있도록 인코딩을 한다.

웹 브라우저를 사용할 경우 브라우저에서 URL 인코딩은 자동으로 해준다.

※아래의 인코딩 문자는 외워 두는 것이 좋다.

문자 인코딩
& %26
% %25
+ %2B
공백 %20
= %3D
# %23
' %27
? %3F

 

 

 

 

웹 구조에서 살펴본 URL 인코딩

그림7 - 로그인 시 입력한 데이터가 웹 브라우저를 통해 서버로 전송되는 과정

 

1. 사용자는 아이디와 패스워드를 입력하여 로그인 한다.

2. 웹 브라우저는 아이디와 패스워드 값 내에 있는 URL 예약 문자를 인코딩하여 서버로 전송한다. - HTTP Request

 

 

 

 

 

 

 

 

 

 

 

 

참고

https://www.inflearn.com/course/%EC%9B%B9-%EA%B8%B0%EC%88%A0-%EA%B8%B0%EC%B4%88