Solução
Nome | Valor |
---|---|
Vulnerabilidade | Type Confusion |
CWE | CWE-843 |
OWASP Top Ten | A01_2021-Broken_Access_Control |
Você sabia que o sistema de tipos de uma linguagem de programação pode afetar a segurança? Pois você acabou de presenciar uma das maneiras como isso pode acontecer.
Type confusion é quando os dados de uma aplicação são interpretados de forma inesperada pelo programador por não ser do tipo que ele estava esperando.
Quando você envia uma string nos campos
username
e password
, a aplicação
se comporta como o esperado. Mas se você enviar valores
booleanos nestes campos, a engine do PHP irá fazer uma
comparação entre um booleano e uma string. Nesse
caso a string é convertida para booleano.
Se a string for vazia ela é considerada como
false
, do contrário true
. Então,
se você mandar true
nos campos
username
e password
, você
conseguirá fazer login na aplicação. Porque o PHP estará
comparando true
com true
.
Exemplos:
fetch('./login.php', {
method: 'POST',
body: JSON.stringify({
username: true,
password: true,
,
})
}).then(response => response.json())
.then(response => console.log(response));
Ou usando o curl:
$ curl \
--data '{"username": true, "password": true}' \
http://127.0.0.1:8080/login.php
Altere o código desse exercício para garantir que essa vulnerabilidade não aconteça mais.