<u>test</u> first. On these levels even that may vanish — the source view tells you what got eaten, which is the fingerprint of the filter.> it meets.script, then breaking the tag apart makes the filter rebuild it — it removes the exact piece glueing your halves together.<img src=x onerror=alert(1)
No trailing > → the balanced pattern has nothing to match. Followup markup from the page completes the tag when the browser parses it — the handler fires anyway. If a filter seems to keep your payload but eat its head, check what it thinks a tag is.
<scr<script>ipt>alert(1)</scr<script>ipt>
The filter strips the script token — removing the piece that holds your halves apart. Left over: <scr + ipt> and </scr + ipt> — which reassembles into the very tag it was written to kill. Same trick for any deny-listed name: <i + <img> + mg>. This is the final evolution in the lesson, and it works BECAUSE the filter is too aggressive.
Evasion ladder — final levels
levels 5–6