Type Juggling
Type Juggling em PHP
Type juggling (ou coerção de tipo) é um comportamento comum em linguagens de programação de tipagem fraca, como o PHP, onde os tipos de dados são convertidos automaticamente pelo interpretador dependendo do contexto
exemplo
if ("0e1234" == "0") { echo "Iguais!"; } Exemplo de bypass
if ($_POST['password'] == $hash) {
// Acesso concedido
}Bypass de autenticação com hashes "0e..."
$stored_hash = md5("senha_secreta"); // exemplo: "0e462097431906509019562988736854"
if ($_POST['senha'] == $stored_hash) {
echo "Acesso concedido";
}O atacante pode fazer:
$input = "240610708"; // md5("240610708") = "0e462097431906509019562988736854"Type juggling com == e ===
== e ===phpCopiarEditar$a = "0e1234";
$b = "0";
var_dump($a == $b); // true
var_dump($a === $b); // falseNa comparação com ==, o PHP tenta converter ambos os lados para números → 0 == 0.
Mas com ===, ele compara tipo e valor, então detecta que um é string e o outro é número.
Quebra de verificação em arrays (ex: reset de senha)
Suponha o código:
Se o atacante envia:
A variável $user vira um array, e não uma string. O código isset($data[$user]) dá um warning, mas pode ser bypassado ou crashar dependendo do PHP.


Last updated