Markdown 링크 XSS
Markdown/MDX/에디터 렌더러가 링크 URL, raw HTML, 이미지 URL 을 안전하게 정규화하고 sanitize 하는지 확인한다.
HTML payload 테스트
이 시나리오는 iframe sandbox 가 아니라 사용자 입력이 HTML/DOM 으로 렌더링되는 지점을 검증합니다.
- Markdown 렌더링 후 최종 HTML 을 다시 sanitize 하는지 확인
- 링크 URL 은 프로토콜 allowlist 로 검증하는지 확인
- raw HTML 허용 옵션이 켜져 있는지 확인
페이로드
복사할 payload
Markdown 소스를 저장하는 에디터에 붙여 넣고 렌더러 결과의 href 를 확인한다.
붙여넣을 곳
본인이 권한을 가진 dev/staging의 에디터, 댓글, 프로필 또는 HTML 렌더링 입력란
판정 기준
실행되면 위험 신호입니다. 코드가 텍스트로 표시되거나 위험 요소가 제거되어야 기대한 방어 결과입니다.
미리보기
미리보기는 학습용으로 의도적으로 unsafe 렌더링을 수행합니다. 실제 서비스에서는 이 payload 가 텍스트로 이스케이프되거나 제거되어야 합니다.
로그
// 로그 없음
해설
- Markdown은 안전한 텍스트 포맷처럼 보이지만, 렌더링 결과는 결국 HTML 입니다. 링크와 이미지 URL 정책이 약하면
javascript:같은 스킴이 살아남을 수 있습니다. - ProseMirror, Markdown, MDX, rich text renderer 는 저장 형식과 출력 형식이 다를 수 있습니다. 저장 전 sanitize 만 믿지 말고 최종 출력 HTML 기준으로도 검증하세요.
- raw HTML 허용, custom node renderer, embed 확장 기능은 별도 공격면입니다. 플러그인별로 허용 태그와 URL 정책을 문서화하는 편이 좋습니다.