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