https://learn.dreamhack.io/labs/c2db56fc-7b45-436c-8d3b-e9950f1e5025
목표 – 1단계: script 키워드 탐지
필터링 규칙은 script 문자열이 존재할 경우 출력을 거부한다.
목표는 alert를 실행하면 된다.
대소문자 필터링이 존재하지 않고, 대소문자 구분없이 동작한다는 점을 이용하여 필터링한다.
<Script>alert();</Script>

목표 – 2단계: 강화된 script 키워드 탐지
필터링 규칙은 대소문자 구분없이 script 문자열이 존재할 경우 출력을 거부한다.
목표는 alert를 실행하면 된다.
그렇다면 on 이벤트 핸들러로 우회하면 된다.
<img src=x onerror=alert()>

목표 – 3단계: script, on 키워드 탐지
필터링 규칙은 대소문자 구분없이 script, on 문자열이 존재할 경우 출력을 거부한다.
목표는 alert를 실행하면 된다.
iframe 태그로 javascript를 삽입하여 우회한다. src로 javascript: 를 사용한다면 script가 규칙에 충족되므로 srcdoc으로 HTML 엔티티 인코딩으로 우회한다.
<iframe srcdoc='<img src=x onerror=parent.alert(1)>'>

parent를 사용한 것은 부모 창에서 alert를 실행하기 위함이다.
ChatGPT 피셜) parent가 없다면 일부 브라우저에서 alert가 무시될 수 있으므로 실제 공격 상황에서 효과 보장을 위해 사용한다.