Se trata de generar tokens CSRF.CSRF token generation
Por lo general, me gustaría generar un token con sede fuera de una pieza única de datos asociados con la sesión del usuario, y el algoritmo hash y salados con una clave secreta.
Mi pregunta es en lo que respecta a la generación de fichas cuando no hay datos de usuario únicas para usarlas. No hay sesiones disponibles, las cookies no son una opción, la dirección IP y cosas de esa naturaleza no son confiables.
¿Hay alguna razón por la que no puedo incluir la cadena hash como parte de la solicitud, así? Ejemplo pseudocódigo para generar el token y incrustarla:
var $stringToHash = random()
var $csrfToken = hash($stringToHash + $mySecretKey)
<a href="http://foo.com?csrfToken={$csrfToken}&key={$stringToHash}">click me</a>
Ejemplo validación del lado del servidor de la CSRF token de
var $stringToHash = request.get('key')
var $isValidToken = hash($stringToHash + $mySecrtKey) == request.get('csrfToken')
la cadena que se utiliza en el hash sería diferente en cada petición. Siempre que se incluya en cada solicitud, la validación del token CSRF podría continuar. Dado que es nuevo en cada solicitud y solo está incrustado en la página, el acceso externo al token no estaría disponible. La seguridad del token cae en $ mySecretKey, que solo yo conozco.
¿Es este un enfoque ingenuo? ¿Me estoy perdiendo alguna razón por la que esto no puede funcionar?
Gracias
La solución propuesta es vulnerable a ataques de repetición.El mismo token y la combinación de teclas funcionarán indefinidamente. – Matthew