<u>test one, two, three</u> — proves HTML lands raw (no encoder) and there's no CSP (inline executors like ours run fine).<script>alert(1)</script> fails. Before escalating, ask: which part of my input changed? The source view will tell you letter for letter.<script>confirm(1)</script> — if that dies too, the filter is watching the tag, not the JS call. This is trial and error with discipline, not guessing.script and ate the tag, maybe it never checks other cases. Case-mix is the cheapest test — always try it first.<sCript>alert(1)</sCript>
The filter only knows the lowercase literal <script — mix case anywhere in the tag and it sails through. Spectrum applies to any tag: <iMg, <oNeRRoR… Cheapest bypass you'll ever meet; always test it before anything clever.
<script>alert(1)</script><script>alert(1)</script>
The regex eats ONE full element per pass — the first. The duplicate comes out intact in the source view and executes. Same reflex works at word level too: <sCrcript>-style nesting occasionally survives single-pass word strips on other targets.
Evasion ladder
levels 1–2