Cross-site scripting (XXS): innerHTML e insertAdjacentHTML
Esse texto visa dividir o meu conhecimento adquirido após ficar curioso sobre um ponto da aula.
Conforme vou acompanhando as aulas costumo checar documentações para entender melhor o que estou usando de recursos.
E encontrei um fator bem interessante acerca do innerHTML, como além de ele ser usado pela maioria dos sites também me atentei que a derivação de se qualquer texto que você colocar no input ao passar por um trecho de código que utiliza o innerHTML para colocar conteúdo no DOM, ele injetará aquele texto no HTML da página, independente do que for. Até então, qual o problema? já que o HTML 5 por padrão não executa uma tag script inserida via innerHTML.
O problema está em que rodar um código JS por um input que de alguma forma passará por um innerHTML não ocorre somente com o uso da tag script, é possível executar um script de outras formas ao colocar texto com código no input, segue os exemplos simples:
<img src='x' onerror='console.log("Hello World! Security are cool and vulnerability are bad :D")'>
<img src='x' onerror='alert("Site bastante divertido esse hein")'>
Recomendo que teste! E encontre exemplos mais complexos nesta cheat-seet de xxs.
Neste ponto pensei "okay, legal. Vão poder dar Hello World com console.log através do input", mas existem casos realmente significativos? Além dos problemas que o Orkut e o Twitter tiveram com XXS em 2010 (G1) e os problemas que o eBay teve em 2017 (portal sobre segurança na internet), por não serem recentes continuei pensando se em 2020 isso ainda é um problema e posso não ter pesquisado o bastante, mas não encontrei casos alarmantes.
Ainda sim, considero que "não possibilidade de problema de segurança" seja mais interessante que "possibilidade de problema de segurança", por isso me desafiei a dar FIX nesse problema.
O código do instrutor é algo parecido com isso: (fiz algumas alterações em nomenclaturas e difere o nosso estilo de escrita em alguns pontos, mas nada mais que isso):

Após testar vários XXS no código do instrutor, pensei "duh, basta eu utilizar outro método para inserir o HTML no DOM" e tentei a utilização do insertAdjacentHTML() de forma bastante ingênua, pois eu não havia entendido corretamente o que seria um XXS e qual fluxo ocorria para o anterior innerHTML ser um exemplo de Vulnerabilidade. Código da minha primeira tentativa de burlar um XXS que na verdade também é completamente vunerável:

Com isso que ocorreu durante uma tarde de 2 meses atrás, pausei os meus estudos de Front-end e me foquei em estudar Back-end(Foi insanamente bacana!) em paralelo com experimentações do React.Js, mas eu só queria voltar a estudar Front-end para valer quando eu vencesse esse desafio. Hoje eu venci e não demorou mais de 5 minutos para desenvolver uma solução e estou bastante contente com isso, basicamente, eu li os códigos anteriores e pensei "Ué, basta eu aninhar os nós com o .appendChild e inserir o texto com o textContent" pois mesmo se for um script colocado no input, ele interpretará como texto dentro da tag e injetará no DOM somente como um texto dentro de uma tag. Enfatizando, que, se eu li a parte da documentação que recomenda o uso do textContent, não devo ter imaginado a implementação. Código da solução:

Sei que tudo isso não foi a coisa mais genial do mundo, provavelmente, se espera que qualquer Junior já saiba disso tudo, mas estou contente, pois demonstrá a minha evolução no entendimento da web.
Também tenho noção de que o curso visa me ajudar a familiarizar-me com o DOM e não as miúdas, tento ir além e obrigado pelo conhecimento Felipe Nascimento você está contribuindo para que algum dia eu me torne um bom Dev.
Obrigado pela atenção quem chegou até aqui!
Sapere Aude.
Referências: