Is there any code for a proof of concept that I can run without any closing brackets (>)?
No, i tag regolari non funzionano senza una parentesi di chiusura. Tuttavia, puoi utilizzare i commenti.
Se il tokenizer del tuo browser è conforme alla specifica della sintassi HTML W3C (quali browser moderni dovrebbero fare), non emetterà un token di tag a meno che non forniate una parentesi di chiusura ( >
). Puoi confermare questo cercando le transizioni di stato in il tokenizzatore .
Di ', inietti <script
che significa che ora sei Stato nome tag . Ecco le tue opzioni:
8.2.4.10 Tag name state
Consume the next input character:
"tab" (U+0009)
"LF" (U+000A)
"FF" (U+000C)
U+0020 SPACE
Switch to the before attribute name state.
"/" (U+002F)
Switch to the self-closing start tag state.
">" (U+003E)
Switch to the data state. Emit the current tag token.
Uppercase ASCII letter
Append the lowercase version of the current input character (add 0x0020 to the character's code point) to the current tag token's tag name.
U+0000 NULL
Parse error. Append a U+FFFD REPLACEMENT CHARACTER character to the current tag token's tag name.
EOF
Parse error. Switch to the data state. Reconsume the EOF character.
Anything else
Append the current input character to the current tag token's tag name.
Solo >
emette il token del tag, ma non ti è consentito utilizzarlo. Se il documento finisce proprio lì ( EOF
), stai producendo un errore di analisi e non emettendo il token. Un'eccezione a tale comportamento sono i commenti e le dichiarazioni DOCTYPE.
Ora diciamo di entrare nello stato dei commenti tramite <!--
. Quindi queste sono le opzioni:
8.2.4.48 Comment state
Consume the next input character:
"-" (U+002D)
Switch to the comment end dash state
U+0000 NULL
Parse error. Append a U+FFFD REPLACEMENT CHARACTER character to the comment token's data.
EOF
Parse error. Switch to the data state. Emit the comment token. Reconsume the EOF character.
Anything else
Append the current input character to the comment token's data.
Come puoi vedere, un end-of-file emette ancora il token del commento. Quindi, anche se non è possibile chiudere un tag, è possibile inserire un commento che commenta il seguente testo. Inoltre, verranno emessi token DOCTYPE ( <!DOCTYPE
) e sostanzialmente qualsiasi cosa che inizi con <!
.
Ovviamente, se il tuo punto di iniezione è circondato da tag HTML, non devi chiudere tu stesso il tag poiché verrà applicato qualsiasi >
successivo e lo farà per te. @tim ha dato un esempio per questo nella sua risposta.