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:
- O código de
TestRequestvalida o input do usuário; - O código do método
post()emTestControllertrata a requisição.
Quando um usuário tenta visualizar um post:
- O código do método
get()emTestControllertrata a requisição; - 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