피드로 돌아가기
Dev.toBackend
원문 읽기
HTML Entity Decode 한 줄로 Signed URL 검증 실패 문제 해결
The Tracking-Link Bug That Only Breaks Signed URLs
AI 요약
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를 작성하여 코드 회귀 방지