Mysql
 sql >> Base de données >  >> RDS >> Mysql

Masquer le véritable ID d'objet de base de données dans les URL

Cette question a été souvent posée, avec un choix de mots différent (ce qui rend difficile de dire "Cherchez-la!"). Ce fait a suscité un article de blog intitulé Le Guide complet sur le chiffrement des paramètres d'URL en PHP .

Ce que les gens veulent faire ici

Ce que les gens devraient faire à la place

Explication

Généralement, les gens veulent court URL aléatoires. Cela ne vous laisse pas beaucoup de place pour chiffrer puis authentifier l'ID d'enregistrement de base de données que vous souhaitez masquer. Cela nécessiterait une longueur d'URL minimale de 32 octets (pour HMAC-SHA256), soit 44 caractères lorsqu'il est encodé en base64.

Une stratégie plus simple consiste à générer une chaîne aléatoire (voir random_compat pour une implémentation PHP5 de random_bytes() et random_int() pour générer ces chaînes) et faites référence à cette colonne à la place.

De plus, les haschids sont cassés par simple cryptanalyse. Leur conclusion indique :

L'attaque que j'ai décrite est nettement meilleure qu'une attaque par force brute, donc d'un point de vue cryptographique, l'algorithme est considéré comme cassé, il est assez facile de récupérer le sel ; permettant à un attaquant d'exécuter l'encodage dans les deux sens et invalide la propriété 2 pour une fonction de hachage idéale.

Ne vous y fiez pas.