포스트

[Web] URL 인코딩과 디코딩

[Web] URL 인코딩과 디코딩

URL 인코딩이란?

URL을 서버가 이해할 수 있는 표준 형식으로 변환하는 것으로 URL 인코딩은 ASC ll 문자집합으로 인코딩 하는것이 표준이다.

그렇기에 아스키코드에 포함되지 않은 문자에 대해서는 변환 작업이 필요하다.

ASCll 코드에 포함되지 않은 것을 : 한글, URL로 사용될 수 있는 문자들(;, / ,& )

Example

아래와 같은 문자열이 있다고 가정하자

1
Hello world! 안녕하세요

이 문장을 인코딩 하면

1
Hello%20World%21 %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94
  • 공백( ``) → %20
  • !%21
  • %EC%95%88

왜 URL 인코딩을 사용하는가?

서버는 URL 주소를 받는다… 이러한 URL을 받을 때 서버가 쉽게 읽을 수 있게 하기 위해서 이러한 작업을 한다.

워낙에 인코딩에 %가 많이 들어가는데 그렇기에 % 인코딩이라고도 불린다…

URL 디코딩

인코딩된 데이터(URL)을 원래의 문자열로 변환화는 과정이다.

왜 이런 작업을 하는것일까?

서버는 사용자의 의도를 알지만 일반적인 AP코드나 작업자는 이를 다시 복원할 필요가 있다…

만약 안녕하세요를 보내 %EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94 라는 데이터로 서버에 도착을 한다면 서버는 위와 같은 문자열에 맞는 처리를 할 수 없다… 그렇기에 이를 디코딩하여 다시 안녕하세요 로 복원해 처리한다.

다른 예

1
/search?q=Hello%20World

디코딩 하지 않으면 q 의 값은 Hello%20World 로 처리되어진다.

적절하게 디코딩 해야 사용자의 요청에 응답할 수 있다.


WAF의 URL 차단 규칙

상황제시 web의 관리자로써 사외에서 특정한 도메인 /admin 을 차단해야한다. 이를 위해 관리자는 WAF를 사용하기로 하였다고 가정 그렇다면 규칙에 있어 인코딩된 규칙을 설정해야할까? 디코딩된 규칙을 설정해야할까?

이러한 정답을 알아보기 위해 WAF의 동작 방식에 대해 간단하게 알아봐야한다.

일반적인 WAF의 처리 과정

  1. request 수신
  2. URL을 디코딩하여 분석
  3. 디코딩된 URL과 설정된 규칙을 비교

즉 일반적으로 디코딩 되어진 값과 비교를 하기에 /admin 으로 쓰는게 맞다!

WAF는 일반적으로 인코딩 값의 비교와 디코딩 값의 비교 모두 지원한다.. 왜냐하면 공격자가 우회를 위해 인코딩 된 %2Fadmin 를 통해 우회를 할 수 있기 때문이다.

그렇기에 일반적으로

1
2
IF URL_PATH == "/admin" OR URL_PATH == "%2Fadmin" THEN BLOCK

와 같이 양 규칙을 모두 우회하는 방식이 추천되어진다!

URL 인코딩 디코딩 표

image.png

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.