Um resumo sobre o padrão de segurança HMAC
Source: Dev.to
Definição
O HMAC (Hash-based Message Authentication Code) é um mecanismo de segurança que permite verificar a integridade e autenticidade de uma mensagem, garantindo que ela não foi alterada e que foi gerada por quem possui uma chave secreta. Ele é muito usado em autenticação de APIs, tokens e assinaturas digitais. Imagine que você envia uma carta dentro de um envelope lacrado com um selo exclusivo que só você e o destinatário conhecem a forma de produzir. Se alguém abrir a carta e alterar qualquer palavra, o selo não vai mais bater com o original. O HMAC funciona exatamente assim: ele “lacra” os dados com uma assinatura impossível de reproduzir sem a chave secreta. $payload = [ ‘user’ => ‘joao’, ‘exp’ => time() + 300 ];
// token simples sem proteção $token = base64_encode(json_encode($payload));
Problema Qualquer pessoa pode: decodificar o token alterar exp reencodar e enganar o sistema $payload = [ ‘user’ => ‘joao’, ‘exp’ => time() + 300 ];
$secret = ‘chave_super_secreta’;
$signature = hash_hmac( ‘sha256’, json_encode($payload[‘user’]) . ’|’ . $payload[‘exp’], $secret );
$payload[‘sig’] = $signature;
$token = base64_encode(json_encode($payload));
$payload = json_decode(base64_decode($_GET[‘token’]), true);
$check = hash_hmac( ‘sha256’, json_encode($payload[‘user’]) . ’|’ . $payload[‘exp’], $secret );
if (!hash_equals($check, $payload[‘sig’])) { die(“Token inválido”); }