최근 수정 시각 : 2022-06-09 22:47:31

쿼리 문자열


1. 개요2. 생김새3. 웹 서버에서

1. 개요

Query string

URL 끝에 물음표로 시작하는 문자열이다. 쿼리 스트링, 쿼리 파라미터라고도 부른다. SQL의 명령어를 이르는 쿼리와는 다르다.

검색 사이트에 ?query=XXX 라든지, ?redirect=URL 이런 것이 쿼리 문자열이다.

2. 생김새

쿼리 문자열은 기본적으로 ' ?'로 시작하며 키와 값의 쌍을 '키 =값'의 형태로 나타낸다. 여러 쌍은 ' &'로 구분한다. 같은 키가 중복될 경우 가장 나중에 선언된 값을 취한다.

쿼리 문자열은 많은 곳에서 사용하는데, 예를 들어 나무위키에서 리다이렉트를 통해 어떠한 문서에서 왔다는 것을 표현할 때는 'from'이라는 키의 쿼리 문자열 값을 사용한다.
https://namu.wiki/w/쿼리%20문자열?from=무언가
따라서 위 주소의 웹페이지를 불러오면 위에 이런 문구가 뜬다.
파일:chrome_687hNCkEC5.png
이 처럼 쿼리 문자열으로 클라이언트가 서버에 키와 값으로 'from'은 '무언가'라고 보낼 수 있다.

또 다른 값들을 한번에 여러개 보내려면,
http://example.example/?[1]namu=wiki&[2]wiki=namu
이렇게 쿼리 문자열을 보내면 된다.

다만 사용할 수 있는 데이터에 제한이 있다. 무조건 ASCII로만 전송해야 하며, 그나마도 숫자, 로마자, 일부 특수문자[3]만 가능하다. 이 이외의 문자를 보내려면 퍼센트 인코딩을 거쳐야 한다.

3. 웹 서버에서

웹 서버[4]에서는 쿼리 문자열로 전달한 값을 GET 요청으로 받아들인다. 반대로, POST 요청[5]이나 쿠키, 세션 등 쿼리 문자열을 통하지 않고 값을 전달하는 방식도 있다.

웹 API의 URLSearchParams 인터페이스를 활용하여 쿼리 문자열을 해석하여 사용할 수 있다.

URL에 그대로 싣는 방법에서 알 수 있듯, 보안상으로 가장 취약한 방식이다. CSRF 공격의 대다수가 쿼리 문자열을 이용한 공격이다.
[1] 쿼리 문자열을 시작한다는 토큰. [2] 다른 값을 이어붙이는 토큰. [3] +, -, _, / 등 [4] 아파치 HTTP 서버, IIS, NGINX [5] <form method="post"> ...</form>을 이용한 요청

분류