Este es uno de los casos fronterizos en los que, aunque uno no puede responderlo de manera definitiva con un claro, decidió "¡No! Así es como puedo romperlo". , todavía hay que decir "... pero ¿por qué quieres hacer esto si es tan fácil hacerlo bien?" .
¿Puede un atacante explotar microtime
siendo usado como token? Al menos en teoría, la respuesta debe ser: "Definitivamente, y fácilmente" . No lo he intentado, así que no puedo decir con seguridad qué tan difícil es, pero es cierto que es posible.
¿Puede un atacante explotar microtime
alimentado en mt_rand
? Posiblemente, poco probable, casi seguro que no. Al menos no con una gran probabilidad de éxito, y no sin un trabajo considerable. ¿Eso significa que es seguro? No.
Por otro lado, realmente no le cuesta nada a
a) usa un token con más bits (32 realmente no es mucho)
b) utilice un token que sea impredecible (generador aleatorio fuerte)
Yo usaría un token de 64 bits (128 si eres paranoico). El uso de un token de 128 bits es, por supuesto, mucho más seguro contra el forzamiento brutal, pero como los tokens tienen una vida útil limitada de unos pocos minutos y la cantidad de solicitudes que pueden enviarse a través de la red es limitada, 64 bits deberían estar bien (y en En caso de que el usuario deba ingresar la clave, esto significa que solo la mitad de la molestia para el usuario, también usar solo 64 bits agotará el generador de entropía más lentamente).
Si su servidor tiene un enlace ascendente gigabit, posiblemente no pueda recibir más de 1.1 millones de cuadros por segundo (asumiendo UDP y 8 bytes de carga útil). Si sus tokens son válidos por un tiempo "normal", como p. Ej. 15 minutos, la probabilidad de éxito de obtener un hit mientras se satura el enlace durante ese tiempo es 10 -11 . Además, aparte de la menor probabilidad de éxito, si alguien satura el enlace por completo durante varios minutos, es probable que esto no pase desapercibido.
La configuración de una enorme botnet tampoco servirá de nada. Por supuesto, pueden hacer lo mismo, pero no importa qué, no hay más marcos que puedan atravesar el cable (limitación física).
Compare eso con un escenario en el que podría estar adivinando un token correcto de otro token que me ha enviado o que he escuchado a escondidas con una posibilidad de, digamos 1 en 100 (esto debería ser posible para un temporizador con la resolución de microtime
) simplemente mirando el reloj! O compárelo con un escenario en el que puedo derivar el estado de su generador de 623 mensajes consecutivos.
Incluso si es poco probable que tenga éxito a la vez, hay galaxias entre esto y un enfoque seguro (y ambos te cuestan lo mismo).