피드로 돌아가기
The Tracking-Link Bug That Only Breaks Signed URLs
Dev.toDev.to
Backend

HTML Entity Decode 한 줄로 Signed URL 검증 실패 문제 해결

The Tracking-Link Bug That Only Breaks Signed URLs

Nasrul Hazim Bin Mohamad2026년 6월 25일5intermediate

Context

이메일 클릭 트래킹을 위해 모든 링크를 Redirect 엔드포인트로 리라이팅하는 self-hosted 시스템 구조. Blade 템플릿 렌더링 과정에서 발생한 HTML Escaping 결과값이 암호화 로직에 그대로 유입되어 Signed URL의 무결성이 깨지는 현상 발생.

Technical Solution

  • Rendered HTML의 href 속성에서 URL을 추출할 때 발생하는 HTML Entity Escaping 문제 식별
  • & 문자가 &로 변환된 상태로 Crypt::encryptString()에 전달되어 암호문 내에 잘못된 문자가 포함되는 병목 지점 파악
  • html_entity_decode 함수를 도입하여 암호화 전 단계에서 URL을 원본 상태로 복원하는 전처리 로직 추가
  • ENT_QUOTES | ENT_HTML5 옵션을 적용하여 다양한 따옴표 스타일과 HTML5 엔티티 세트 전체를 처리하는 정밀도 확보
  • 복원된 URL을 통해 Decrypt 후 Redirect 시 원본 Signed URL과 바이트 단위로 일치하도록 설계하여 Laravel Signature Validation 통과 유도

- Rendered HTML에서 데이터를 추출해 암호화, 서명, 웹훅 등에 사용할 경우 반드시 HTML Entity Decode 수행 여부 확인 - 브라우저가 아닌 시스템 내부 로직으로 전달되는 데이터는 브라우저의 자동 디코딩 기능을 기대하지 말고 명시적으로 처리 - 영향도가 적은 '한 줄 수정'일수록 구체적인 실패 사례를 검증하는 Regression Test를 작성하여 코드 회귀 방지

원문 읽기