인코딩된 javascript: 프로토콜 우회
HTML entity, 제어문자, 대소문자 변형으로 javascript: URL 검증을 우회할 수 있는지 확인한다.
HTML payload 테스트
이 시나리오는 iframe sandbox 가 아니라 사용자 입력이 HTML/DOM 으로 렌더링되는 지점을 검증합니다.
- URL 속성 검증 전에 entity decoding 과 제어문자 제거가 수행되는지 확인
- 프로토콜 allowlist(http, https, mailto 등) 기반으로 검증하는지 확인
- 렌더러와 sanitizer 가 서로 다른 정규화 규칙을 쓰지 않는지 확인
페이로드
복사할 payload
속성값을 디코딩한 뒤 프로토콜을 검증하는지 확인한다.
붙여넣을 곳
본인이 권한을 가진 dev/staging의 에디터, 댓글, 프로필 또는 HTML 렌더링 입력란
판정 기준
실행되면 위험 신호입니다. 코드가 텍스트로 표시되거나 위험 요소가 제거되어야 기대한 방어 결과입니다.
미리보기
미리보기는 학습용으로 의도적으로 unsafe 렌더링을 수행합니다. 실제 서비스에서는 이 payload 가 텍스트로 이스케이프되거나 제거되어야 합니다.
로그
// 로그 없음
해설
- URL 필터가
href.startsWith("javascript:")같은 문자열 검사만 하면 HTML entity 나 제어문자 변형을 놓칠 수 있습니다. - 검증 순서는 정규화가 먼저입니다. 브라우저가 해석하는 형태와 같은 기준으로 디코딩하고, 허용할 프로토콜만 통과시켜야 합니다.
- Markdown, link preview, embed 카드처럼 링크를 만드는 모든 렌더러에서 같은 URL 정책을 공유하는지 확인하세요.