Questo è uno dei casi limite in cui, sebbene non si possa rispondere in modo definitivo con un chiaro, deciso "No! Ecco come potrei romperlo". , uno ha ancora da dire "... ma perché vuoi farlo se è così facile farlo bene?" .
Un utente malintenzionato può sfruttare microtime
utilizzato come token? Almeno in teoria, la risposta deve essere: "Definitivamente e facilmente" . Non ho provato, quindi non potrei dire per certo quanto sia difficile, ma è certo che sia possibile.
Un attaccante può sfruttare microtime
inserito in mt_rand
? Forse, improbabile, quasi certamente no. Almeno non con una probabilità di successo irresistibilmente alta, e non senza un lavoro considerevole. Significa che è sicuro? No.
D'altra parte, non ti costa davvero nulla per
a) usa un token con più bit (32 in realtà non è molto)
b) usa un token che è imprevedibile (generatore casuale strong)
Userei un token a 64 bit (128 se sei paranoico). L'utilizzo di un token a 128 bit è ovviamente molto più sicuro contro il brute forzato, ma poiché i token hanno una durata limitata di alcuni minuti e la quantità di richieste che possono essere inviate in rete è limitata, 64 bit dovrebbero andare bene (e in caso in cui l'utente deve digitare la chiave, significa solo la metà del problema per l'utente, inoltre solo utilizzando 64 bit si esaurirà il generatore dall'entropia più lentamente).
Se il tuo server ha un uplink gigabit, non può ricevere più di 1,1 milioni di frame al secondo (supponendo UDP e 8 byte di payload). Se i tuoi token sono validi per un periodo di tempo "normale", ad es. 15 minuti, la possibilità di riuscire a ottenere un successo durante la saturazione del collegamento durante quel periodo è 10 -11 . Inoltre, a parte le ridotte probabilità di successo, se qualcuno saturerà completamente il link per diversi minuti, questo probabilmente non passerà inosservato.
Anche l'installazione di una enorme botnet non sarà di grande aiuto. Ovviamente possono farlo, ma non importa cosa, non ci sono più frame che possono passare attraverso il cavo (limitazione fisica).
Confrontalo in uno scenario in cui potrei indovinare un token corretto da un altro token che mi hai inviato o che ho origliato con una possibilità di, diciamo 1 su 100 (questo dovrebbe essere fattibile per un timer con la risoluzione di microtime
) semplicemente guardando l'orologio! Oppure confrontalo con uno scenario in cui posso ricavare lo stato del tuo generatore da 623 messaggi consecutivi.
Anche se sono piuttosto improbabile che abbia successo in una volta, ci sono galassie tra questo e un approccio sicuro (ed entrambi ti costano lo stesso).