Solução

Nome Valor
Vulnerabilidade Cross-site Scripting (XSS)
CWE CWE-79
OWASP Top Ten A03_2021-Injection

Se você tem pouca experiência com aplicações web e nunca mexeu com Laravel, pode até ter achado esse desafio um pouco confuso por ter muita coisa específica do framework. Mas como o título do desafio diz: Esse também é um desafio simples.

Quando um usuário tenta criar um novo post:

  1. O código de TestRequest valida o input do usuário;
  2. O código do método post() em TestController trata a requisição.

Quando um usuário tenta visualizar um post:

  1. O código do método get() em TestController trata a requisição;
  2. O Blade template resources/views/test.blade.php é renderizado para o usuário e a página HTML é retornada.

Em que momento é garantido que no conteúdo ou no título do post não terá código JavaScript? Exatamente, em momento algum!

Isso é um Stored XSS, que é quando o XSS é armazenado no banco de dados e pode ser renderizado em uma (ou mais de uma) página.

Para explorar esse exemplo, basta adicionar tags HTML que permitam a execução de JavaScript no campo content, ou até mesmo no title, ao criar um novo post na aplicação.

Crie uma nova aplicação Laravel, crie rotas para os endpoints POST e GET desse exercício e explore-o em seu ambiente local. Documentação do Laravel: https://laravel.com/docs/11.x