En nuestro sitio, proporcionamos a los usuarios una simulación basada en su información privada (proporcionada a través de un formulario). Nos gustaría permitirles volver a sus resultados de simulación más tarde, pero sin obligarlos a crear una cuenta de inicio de sesión / contraseña.
Hemos pensado en enviarles un correo electrónico con un enlace, desde el que pudieran recuperar sus resultados. Pero, naturalmente, tenemos que proteger esta URL, porque están en juego datos privados.
Por lo tanto, tenemos la intención de pasar un token (como una combinación de letras y dígitos de 40 caracteres, o un Hash MD5) en la URL y usar SSL.
Finalmente, recibirían un correo electrónico así:
Hola,
recupera tus resultados en https://www.example.com/load_simulation?token=uZVTLBCWcw33RIhvnbxTKxTxM2rKJ7YJrwyUXhXn
¿Qué piensa usted al respecto? ¿Es lo suficientemente seguro? ¿Qué me aconsejarías para la generación simbólica? ¿Qué hay de pasar parámetros de URL en una solicitud https?
Respuestas:
SSL protegerá los parámetros de consulta en tránsito; sin embargo, el correo electrónico en sí no es seguro y el correo electrónico puede rebotar en cualquier número de servidores antes de llegar a su destino.
Además, dependiendo de su servidor web, la URL completa puede registrarse en sus archivos de registro. Dependiendo de la confidencialidad de los datos, es posible que no desee que el personal de TI tenga acceso a todos los tokens.
Además, la URL con la cadena de consulta se guardaría en el historial de su usuario, lo que permitiría a otros usuarios de la misma máquina acceder a la URL.
Finalmente, y lo que hace que esto sea muy inseguro es que la URL se envía en el encabezado Referer de todas las solicitudes de cualquier recurso, incluso recursos de terceros. Entonces, si está utilizando Google Analytics, por ejemplo, le enviará a Google el token de URL y todo a ellos.
En mi opinión, esta es una mala idea.
fuente
Usaría una cookie para eso. El flujo de trabajo debería ser así:
Ahora, el usuario quiere usar un navegador diferente en una máquina diferente. En este caso, ofrezca un botón de "transferencia". Cuando el usuario hace clic en este botón, obtendrá un "token". Puede usar este token en otra computadora para restablecer la cookie. De esta manera, el usuario decide qué tan seguro quiere transferir el token.
fuente
SSL protege el contenido de los datos en tránsito, pero no estoy seguro de la URL.
Independientemente, una forma de mitigar que un atacante reutilice ese token de URL es asegurarse de que cada token solo se pueda usar una vez. Incluso puede configurar una cookie para que el usuario legítimo pueda continuar usando el enlace, pero después del primer acceso, solo funcionará para alguien con la cookie.
Si el correo electrónico del usuario se ve comprometido y un atacante obtiene el enlace primero, bueno, está condenado. Pero el usuario también tiene mayores problemas.
fuente
El correo electrónico es intrínsecamente inseguro. Si alguien puede hacer clic en ese enlace y acceder a los datos, realmente no los está protegiendo.
fuente
Bueno, el token es seguro cuando se pasa a través de SSL. El problema que vas a tener es que está disponible para las personas (aquellas a las que no está destinado) al poder ver la URL.
Si es información privada como SSN, no creo que envíe una URL por correo electrónico. Preferiría que crearan un nombre de usuario y una contraseña para el sitio. Es demasiado fácil comprometer un correo electrónico con ese tipo de información en juego para usted y para ellos. Si la cuenta de alguien está comprometida, se cuestionará de quién es realmente la culpa. Cuanto más seguro, mejor es desde un punto de vista estrictamente CYA.
fuente
Realmente no lo consideraría lo suficientemente seguro para una situación en la que existen serios problemas de privacidad. El hecho de que envíe la URL en un correo electrónico (presumiblemente en texto sin cifrar) es, con mucho, el vínculo más débil. Después de eso, existe el riesgo de ataques de fuerza bruta a los tokens, que (sin la estructura de un mecanismo de autenticación real) probablemente sean más vulnerables que una configuración de nombre de usuario y contraseña bien construida.
Por cierto, no hay ningún problema con los parámetros en una solicitud https.
fuente
Tal como está, sería una mala idea. Escarificará la seguridad con un uso fácil. Como se dijo antes, SSL solo protegerá la transferencia de información entre el servidor y el navegador del cliente y solo evitará el ataque del intermediario. Los correos electrónicos son muy riesgosos e inseguros.
Lo mejor sería una autenticación de nombre de usuario y contraseña para acceder a la información.
Me gusta más o menos la idea de las galletas. También debe cifrar la información de las cookies. También debe generar el token con salt y frase clave más $ _SERVER ['HTTP_USER_AGENT'] para limitar la probabilidad de un ataque. Almacene tanta información no sensible sobre el cliente en la cookie para su uso de verificación.
La frase clave se puede almacenar en la cookie para facilitar su uso, pero tenga en cuenta que también se puede robar la cookie = (.
Es mejor dejar que el cliente escriba la frase clave que proporcionó, que también se almacena en la base de datos junto con sus datos.
O bien, la clave se puede usar en caso de que la persona use una máquina diferente que difiera en los parámetros $ _SERVER ['HTTP_USER_AGENT'] o simplemente pierda la cookie. Entonces la cookie se puede transferir o configurar.
También asegúrese de que los datos confidenciales estén encriptados en la base de datos. Nunca sabes ;)
fuente
¿Es consciente de que si algún pirata informático obtiene acceso a su base de datos, se le puede dar gratuitamente mucha información personal?
Después de eso, diría que esto no es una mala idea. No usaría MD5 o SHA1 ya que no son muy seguros para el hash. Se pueden "descifrar" (sé que no es cifrado) con bastante facilidad.
De lo contrario, tal vez usaría una segunda información que no se enviaría por correo electrónico como una contraseña. La razón es bastante simple, si alguien obtiene acceso al correo electrónico del usuario (bastante fácil con Hotmail si no cancela su sesión), tendrá acceso a cualquier información que el usuario haya enviado.
Tenga en cuenta que HTTPS protegerá y cifrará los datos enviados desde su sitio al usuario final. Nada más, tómatelo como un túnel seguro. Nada más ni nada menos.
fuente
Por lo que entiendo de su idea, en teoría, alguien podría escribir una cadena aleatoria de 40 caracteres o un hash MD5 y obtener los detalles de otra persona. Si bien esto puede ser muy poco probable, solo debe suceder una vez.
Una mejor solución podría ser enviar al usuario un token y luego pedirle que ingrese algunos de los detalles, como su nombre, código postal, ssn o una combinación de estos.
fuente