브라우저와 같은 방식으로 링크를 프로토콜, 호스트, 포트, 경로, 쿼리, 프래그먼트로 나눕니다.
URL 인코더 / 디코더
도구 자체는 영어로 되어 있지만, 이 페이지에서는 귀하의 언어로 설명해 드립니다.
URL 인코더 / 디코더을(를) 사용하세요
기능
피싱 링크에 숨겨진 리디렉션 대상 같은 퍼센트 인코딩 텍스트를 디코딩하거나, encodeURIComponent 또는 encodeURI로 URL에 쓸 텍스트를 인코딩합니다.
이 서비스는 전적으로 브라우저에서 실행되며, 사용자가 입력한 내용은 전혀 업로드되지 않습니다.
URL 인코더 / 디코더 사용 방법
- 텍스트 붙여 넣기. 인코딩된 문자열(예: url=나 redirect= 매개변수의 값)이나 인코딩할 일반 텍스트를 붙여 넣습니다.
- 동작 선택. decode를 누르면 %XX 시퀀스를 문자로 되돌리고, encodeURIComponent는 값 하나를, encodeURI는 주소 전체를 인코딩합니다.
- 출력 읽기. 결과는 버튼 아래 상자에 나타납니다. Error는 입력이 그 동작에 유효하지 않다는 뜻입니다.
- 필요하면 다시 디코딩. decode를 누를 때마다 한 계층씩 벗겨집니다. %25, %3A, %2F가 아직 보이면 출력을 다시 상자에 붙여 넣고 한 번 더 디코딩하세요.
- 복사하거나 넘기기. Copy는 결과를 복사합니다. Send to…는 결과를 Link Unwrapper, Multi-Layer Decoder, URL Defanger 또는 Homoglyph Checker로 넘깁니다.
예시
인코딩된 리디렉션 대상
https%3A%2F%2Flogin.example.com%2Fverify%3Fuser%3Dalice%40example.com%26step%3D2https://login.example.com/verify?user=alice@example.com&step=2디코딩하면 https://login.example.com/verify?user=alice@example.com&step=2가 됩니다. 피싱 링크는 가짜 로그인 페이지가 자동으로 채울 수 있도록 이런 식으로 수신자의 이메일 주소를 담는 경우가 많습니다.
검증 대상
| 신호 | 그 의미는 무엇인가 |
|---|---|
| 디코딩 결과 | 모든 %XX 시퀀스가 UTF-8로 읽힌 해당 문자로 바뀝니다. 그 안에 두 번째 전체 주소, 이메일 주소, 스크립트가 있는지 살펴보세요. |
| 출력에 남은 %25 | %25는 인코딩된 퍼센트 기호입니다. 출력에 여전히 %3A, %2F, %25가 있다면 원본이 두 번 인코딩되었을 가능성이 높으며, 이는 언뜻 보아서는 목적지를 알 수 없게 숨기는 흔한 방법입니다. |
| Error | % 하나만 있거나, % 뒤에 16진수가 아닌 문자가 있거나, UTF-8 시퀀스가 불완전하면 디코딩이 실패합니다. 인코딩은 깨진 서로게이트 쌍에서만 실패하며, 붙여 넣은 텍스트에서는 드뭅니다. |
| 더하기 기호 | decode는 +를 그대로 둡니다. 양식 형태의 쿼리 문자열에서 +는 공백을 뜻하므로 직접 그렇게 읽으세요. |
| encodeURIComponent 출력 | 영문자, 숫자, 하이픈, 밑줄, 점, 물결표 같은 몇몇 기호를 제외한 모든 것을 인코딩하므로 : / ? & = #와 @도 모두 인코딩됩니다. 이메일 주소 같은 매개변수 값 하나에 쓰세요. |
| encodeURI 출력 | : / ? & = # @ 같은 URL 구조를 이루는 문자는 유지하고, 공백과 비ASCII 글자를 인코딩합니다. |
| 비ASCII 글자 | 인코딩하면 비ASCII 글자 하나가 %XX 바이트 2~4개로 쓰입니다. 이렇게 숨겨진 키릴 문자나 악센트 글자는 디코딩해야만 드러납니다. |
더 많은 예시
이중 인코딩된 리디렉션 대상
https%253A%252F%252Fexample.net%252Flogindecode하면 https%3A%2F%2Fexample.net%2Flogin이 됩니다. 그 출력을 다시 디코딩하면 https://example.net/login이 됩니다.
매개변수 값 하나로 쓴 이메일 주소
alice@example.com&next=/accountencodeURIComponent하면 alice%40example.com%26next%3D%2Faccount가 되므로, &와 /가 더 이상 쿼리를 나누지 못합니다.
공백과 악센트가 있는 주소 전체
https://example.org/search?q=café & teaencodeURI하면 https://example.org/search?q=caf%C3%A9%20&%20tea가 됩니다. &가 그대로 남아 tea가 새 매개변수를 시작하게 되므로, 값에는 대신 encodeURIComponent를 쓰세요.
자주 묻는 질문
세 버튼의 차이는 무엇인가요?
encodeURIComponent는 영문자, 숫자, - _ . ~ 같은 몇몇 기호를 제외한 모든 것을 이스케이프하므로 매개변수 값 하나에 적합합니다. encodeURI는 : / ? & = # 같은 URL 구조를 그대로 유지하고, decode는 %XX 시퀀스를 되돌립니다.
디코딩하면 Error가 나오거나 %2F가 남는 이유는 무엇인가요?
% 하나만 있거나 %E0%A4처럼 잘린 잘못된 시퀀스가 있으면 디코딩이 실패하고 도구가 Error를 표시합니다. 한 번 실행할 때 한 계층만 벗기므로 이중 인코딩된 텍스트(%252F)는 한 번 더 디코딩하거나 Multi-Layer Decoder를 써야 하며, +는 공백으로 바뀌지 않습니다.
텍스트가 어딘가로 전송되나요?
아니요. 인코딩과 디코딩은 이 페이지에서 브라우저 내장 함수를 사용하며, 아무것도 업로드되지 않고 어떤 링크도 열리지 않습니다.
피싱 링크를 왜 인코딩하나요?
인코딩하면 읽을 수 있는 주소가 매개변수 안에 숨겨지므로, 미리 보기, 필터, 대충 훑어보는 눈에는 첫 번째 호스트만 보입니다. 리디렉션 서비스와 메일 스캐너도 링크를 감쌀 때 목적지를 인코딩합니다.
디코딩하면 텍스트의 다른 부분도 바뀌나요?
아니요. %XX 시퀀스만 바뀝니다. 글자와 + 기호는 그대로 남고, HTML 엔티티는 변환되지 않습니다.
Safe Links 주소처럼 래핑된 링크 전체는 어떻게 디코딩하나요?
Link Unwrapper를 사용하세요. 목적지를 담은 매개변수를 찾아 한 계층씩 디코딩합니다. 이 도구는 문자열 전체를 한 번에 디코딩하므로 래퍼에 속한 부분까지 디코딩됩니다.
악센트 글자나 키릴 문자가 여러 %XX 묶음이 되는 이유는 무엇인가요?
ASCII 밖의 문자는 먼저 UTF-8 바이트로 쓰이고, 각 바이트가 따로 인코딩됩니다. é는 %C3%A9가 되고, 키릴 문자 а는 %D0%B0이 됩니다.