Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Escondendo o verdadeiro ID do objeto de banco de dados em URLs


Esta pergunta tem sido muito feita, com escolha de palavras diferente (o que torna difícil dizer:"Basta procurar!"). Esse fato gerou uma postagem no blog intitulada The Guia abrangente para criptografia de parâmetros de URL em PHP .

O que as pessoas querem fazer aqui



O que as pessoas deveriam fazer em vez disso



Explicação


Normalmente, as pessoas querem curtas URLs de aparência aleatória. Isso não permite muito espaço para criptografar e autenticar o ID do registro do banco de dados que você deseja ofuscar. Isso exigiria um comprimento mínimo de URL de 32 bytes (para HMAC-SHA256), que é de 44 caracteres quando codificado em base64.

Uma estratégia mais simples é gerar uma string aleatória (veja random_compat para uma implementação PHP5 de random_bytes() e random_int() para gerar essas strings) e faça referência a essa coluna.

Além disso, hashids estão quebrados por criptoanálise simples. Sua conclusão afirma:

O ataque que descrevi é significativamente melhor do que um ataque de força bruta, então, do ponto de vista criptográfico, o algoritmo é considerado quebrado, é muito fácil recuperar o sal; tornando possível que um invasor execute a codificação em qualquer direção e invalida a propriedade 2 para uma função de hash ideal.

Não confie nisso.