EdgeSecu

URL Fragment란? (URL Fragment VS Query String) 본문

카테고리 없음

URL Fragment란? (URL Fragment VS Query String)

Edgemine 2025. 8. 17. 19:58

URL Fragment란?

URL Fragment는 URL에서 해시 기호(#) 뒤에 오는 부분을 말합니다. 이 부분은 웹 페이지 내의 특정 섹션이나 리소스를 식별하는 데 사용됩니다.

URL 구조에서의 위치

 

URI fragment - URIs | MDN

The fragment of a URI is the last part of the URI, starting with the # character. It is used to identify a specific part of the resource, such as a section of a document or a position in a video. The fragment is not sent to the server when the URI is reque

developer.mozilla.org

 

여기서 #SomewhereInTheDocument 부분이 바로 URL Fragment입니다.

핵심 특징: 서버로 전송되지 않음

URL Fragment의 가장 중요한 특징은 서버 요청/응답에 포함되지 않는다는 점입니다. 구체적으로:dev+1

  • 서버로 전송되지 않음: 브라우저가 웹 서버에 리소스를 요청할 때, Fragment 부분은 서버로 전송되지 않습니다wikipedia
  • 클라이언트에서만 처리: Fragment는 서버에서 리소스를 받은 후, 브라우저(클라이언트)에서만 처리됩니다developer.mozilla+1
  • JavaScript로 접근 가능: Fragment는 클라이언트 측 JavaScript를 통해 접근하고 조작할 수 있습니다

Query String vs Fragment 비교

이해를 돕기 위해 Query String과 비교하면:dev

구분Query StringURL Fragment
위치 ? 뒤에 위치 # 뒤에 위치
서버 전송 전송됨 전송 안됨
처리 위치 서버에서 처리 클라이언트에서 처리
예시 ?key=value #section1
 

DOM-based XSS와의 연관성

질문에서 언급하신 DOM-based XSS에서 URL Fragment가 중요한 이유는:

  1. 서버 로그에 기록되지 않음: Fragment는 서버로 전송되지 않으므로 웹 서버 액세스 로그에 남지 않습니다stackoverflow
  2. 클라이언트 측 처리: JavaScript를 통해 Fragment 값을 읽고 DOM을 조작할 때, 적절한 검증 없이 사용하면 XSS 공격에 취약해집니다
  3. Referer 헤더에 포함되지 않음: Fragment는 다른 사이트로 이동할 때 Referer 헤더에도 포함되지 않습니다stackoverflow

일반적인 사용 예시

  • 페이지 내 앵커: #section1 - 해당 ID를 가진 요소로 스크롤wikipedia+1
  • SPA 라우팅: #/user/profile - 단일 페이지 애플리케이션에서 클라이언트 측 라우팅dev
  • 미디어 타임스탬프: #t=10,20 - 비디오의 특정 시간대로 이동developer.mozilla

이러한 특성으로 인해 DOM-based XSS 공격에서는 악성 스크립트가 포함된 URL Fragment를 통해 클라이언트 측에서만 실행되는 공격이 가능하며, 서버 측 보안 검증을 우회할 수 있어 특별한 주의가 필요합니다.

  1. https://en.wikipedia.org/wiki/URI_fragment
  2. https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment
  3. https://dev.to/zahra_mirkazemi/query-strings-vs-hash-fragments-whats-the-real-difference-597n
  4. https://stackoverflow.com/questions/20757583/how-secure-is-it-to-use-fragment-identifiers-to-hold-private-data-in-urls
  5. https://stackoverflow.com/questions/30997420/what-are-fragment-urls-and-why-to-use-them
  6. https://velog.io/@king_nono_1030/HTTP-URI-Fragment
  7. https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments
  8. https://portswigger.net/daily-swig/attackers-can-use-scroll-to-text-fragment-web-browser-feature-to-steal-data-research
  9. https://wicg.github.io/scroll-to-text-fragment/
  10. https://stackoverflow.com/questions/1956378/difference-between-a-querystring-and-a-fragment