Mysql
 sql >> Database >  >> RDS >> Mysql

Nascondere il vero ID oggetto del database negli URL

Questa domanda è stata posta spesso, con una scelta di parole diversa (il che rende difficile dire "Cercalo!"). Questo fatto ha spinto un post sul blog intitolato The Guida completa alla crittografia dei parametri URL in PHP .

Cosa vogliono fare le persone qui

Cosa dovrebbero invece fare le persone

Spiegazione

In genere, le persone vogliono brevi URL dall'aspetto casuale. Ciò non ti lascia molto spazio per crittografare e quindi autenticare l'ID del record del database che desideri offuscare. Ciò richiederebbe una lunghezza minima dell'URL di 32 byte (per HMAC-SHA256), ovvero 44 caratteri quando codificata in base64.

Una strategia più semplice consiste nel generare una stringa casuale (vedi random_compat per un'implementazione PHP5 di random_bytes() e random_int() per la generazione di queste stringhe) e fare riferimento invece a quella colonna.

Inoltre, hashid sono rotti mediante semplice crittoanalisi. La loro conclusione afferma:

L'attacco che ho descritto è significativamente migliore di un attacco di forza bruta, quindi da un punto di vista crittografico l'algoritmo è considerato rotto, è abbastanza facile recuperare il sale; consentendo a un utente malintenzionato di eseguire la codifica in entrambe le direzioni e invalida la proprietà 2 per una funzione hash ideale.

Non fare affidamento su di esso.