[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의 처리 과정
- request 수신
- URL을 디코딩하여 분석
- 디코딩된 URL과 설정된 규칙을 비교
즉 일반적으로 디코딩 되어진 값과 비교를 하기에 /admin
으로 쓰는게 맞다!
WAF는 일반적으로 인코딩 값의 비교와 디코딩 값의 비교 모두 지원한다.. 왜냐하면 공격자가 우회를 위해 인코딩 된 %2Fadmin
를 통해 우회를 할 수 있기 때문이다.
그렇기에 일반적으로
1
2
IF URL_PATH == "/admin" OR URL_PATH == "%2Fadmin" THEN BLOCK
와 같이 양 규칙을 모두 우회하는 방식이 추천되어진다!