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 ===

phpCopiarEditar$a = "0e1234";
$b = "0";

var_dump($a == $b);   // true
var_dump($a === $b);  // false

Na 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