Firmar una URL de devolución de llamada

3

Tengo un sistema de inicio de sesión único que funciona de esta manera:

El usuario hace clic en el enlace en clientsite.com que lo redirige a

mastersite.com?returnTo=http://clientsite.com

Si la autenticación es válida, el usuario se redirige a:

http://clientsite.com?token=xxxx

Como no quiero que http://clientsite.com esté en una lista de sitios web autorizados, decidí hacer lo siguiente:

Todos los sitios del cliente comparten una clave aleatoria secreta común, como

client_token = "VDFdzbZ3qFvWyx5dUMdEDmwnS7T"

y haz lo siguiente:

time = time();    
hash = hash_sha256(client_token + time + http://clientsite.com)
redirecto to : mastersite.com?returnTo=http://clientsite.com&time=time&key=hash

el sitio maestro luego verifique:

is time < time() - 10min ?
is hash_sha256(client_token + time + http://clientsite.com) == hash ?

¿Este esquema es lo suficientemente seguro?

El único problema que veo es si decido cambiar el client_key que necesito para actualizar muchos sitios web, ¿puedo superar esto?

    
pregunta IggY 29.12.2015 - 16:35
fuente

2 respuestas

5
  

hash_sha256 (client_token + time + enlace ) == hash

Parece que será vulnerable a ataque de extensión de longitud . Probablemente desee utilizar HMAC en lugar del hashing simple con sha256; o use una función de hashing que no sea vulnerable a ataques de extensión de longitud.

    
respondido por el Lie Ryan 29.12.2015 - 17:06
fuente
2

Además, hay algunos protocolos que hacen esencialmente exactamente lo que estás haciendo aquí, CAS es el que me viene a la mente y cómo resolví esta necesidad en particular. Está construido específicamente para este caso de uso. La implementación de referencia de CAS está construida en Java, lo cual es un poco molesto, pero hay otras implementaciones por ahí, y escribir la tuya no es tan difícil. La ventaja de utilizar un protocolo como CAS es que, en su mayoría, puede presionar "es el protocolo seguro" para los diseñadores del protocolo.

    
respondido por el tootie 03.01.2016 - 04:46
fuente

Lea otras preguntas en las etiquetas