¿Se puede "recordar" en forma segura en un sitio web sin cuentas?

4

Tengo un sitio web que permite a los usuarios enviar un formulario sin tener que crear una cuenta e iniciar sesión. Sin embargo, para mantener a los usuarios responsables de sus envíos, el formulario requiere que proporcionen su dirección de correo electrónico emitida por la escuela (que sigue) un patrón conocido y constante que se puede usar para obtener el nombre real del usuario).

El proceso actualmente se ve así:

  1. El usuario envía un formulario con su dirección de correo electrónico y el contenido principal que desea enviar. Ambos se almacenan en el servidor.
  2. El sitio envía un correo electrónico de confirmación al usuario a la dirección proporcionada en el formulario de envío.
  3. El usuario hace clic en el enlace de confirmación en el correo electrónico, lo que indica que la aplicación procesa el contenido principal del formulario. (Si no se hace clic en el enlace dentro de un determinado período de tiempo, el contenido principal del formulario se elimina del servidor).

Con el tiempo, esto puede ser inconveniente para los visitantes frecuentes. Me gustaría implementar una casilla de verificación "Recordarme" que almacene en la memoria caché la confirmación del usuario. Con esto implementado, después de confirmar con éxito un envío una vez, los envíos subsiguientes dentro de un período de tiempo determinado no requerirán la confirmación por correo electrónico en absoluto.

La prioridad principal es que no se debe permitir a los usuarios enviar cosas con los nombres de los demás. No quiero implementar esta conveniencia a menos que sepa que se puede hacer sin violar esa prioridad. ¿Se puede sacar esto de manera segura? Si es así, ¿cómo?

    
pregunta Maxpm 16.12.2013 - 17:04
fuente

3 respuestas

3

Dependiendo del tipo de envíos que aceptes, tu sitio me parece que tiene un grave defecto de seguridad porque aceptas envíos sin autenticación. Si Bob conoce la dirección de correo electrónico de Alice, podría enviar datos a su nombre, por lo que no puede confiar en la fuente de cualquier envío. Aunque envías un correo electrónico de confirmación a mucha gente (y supongo que mientras estás hablando de una escuela, es gente joven) probablemente haga clic en el correo electrónico sin pensarlo dos veces. Como padre, me preocuparía si la escuela de mis hijos tuviera un sistema así.

En cuanto a si es seguro, la pregunta es ¿desde qué? ¿Por qué le preocuparía proteger una dirección de correo electrónico que cualquiera podría adivinar si conocen la convención de nomenclatura de la dirección de correo electrónico?

EDITAR: Si todo lo que quiere hacer es hacerlo para que un sistema recuerde una dirección de correo electrónico, simplemente use una cookie, que recordará los datos de usuarios específicos, por lo que funcionaría en un equipo compartido. O simplemente puede decirle al navegador que es un campo autocompletado, con el mismo efecto. Me gustaría tener en cuenta que los niños comparten sus computadoras a menudo, puede ser más conveniente que escriban cada vez que los amigos no terminen enviándose los nombres.

    
respondido por el GdD 16.12.2013 - 17:18
fuente
2

Sí, esto podría funcionar.

El enlace enviado por correo electrónico podría dirigir al usuario a una página de confirmación que le pide que lea el envío y confirme que fue él quien lo escribió. Esto agregaría un paso adicional en lugar de simplemente aceptar el envío después del primer clic en el enlace del correo electrónico. No es infalible, pero al menos tiene un proceso que requiere una participación activa en el sitio web para autorizar un envío de contenido.

Puede establecer una sesión cuando se envíe el artículo y establecer que es necesario que la confirmación por correo electrónico se realice desde la misma computadora y navegador.

En resumen, el proceso sería el siguiente:

  1. El usuario carga el sitio web e ingresa la dirección de correo electrónico y el contenido.
  2. El usuario envía el formulario.
  3. El token de sesión se genera y almacena en el servidor y en la cookie.
  4. El usuario recibe un correo electrónico que solicita confirmar que la publicación del contenido es de ellos.
  5. El usuario hace clic en el enlace de correo electrónico y se redirige a una página que valida el token en el enlace de correo electrónico y comprueba que coincida con el usuario que publicó el contenido mediante la cookie de sesión.
  6. Se le pide al usuario que haga clic en un botón en el sitio para confirmar, y también tiene la opción de remember me .
  7. Si se hace clic en el botón, el indicador para conservar el contenido después de que se establezca el tiempo de espera.
  8. Si no, el contenido se eliminará después del tiempo de espera.
  9. El usuario publica más contenido y si la cookie de sesión coincide con la dirección de correo electrónico y se marcó la opción remember me , el contenido se publica y la marca para retener el contenido se establece automáticamente.
  10. Si alguno de estos es falso, el proceso del paso 3 se repite en su lugar.

  11. El usuario puede elegir log out , lo que eliminará la sesión en el servidor y la cookie.

  12. Si el usuario no visita el sitio por un tiempo, el sistema podría expirar la sesión automáticamente (opcional, pero se recomienda si los usuarios usan cuentas de computadora compartidas).

Lo anterior supone que remember me solo funcionará en la cuenta de computadora / navegador en particular que se usó inicialmente. Esto evitará que los usuarios envíen contenido bajo la identidad de otros usuarios conocidos.

    
respondido por el SilverlightFox 17.12.2013 - 13:10
fuente
0

Depende en gran medida de la implementación técnica de su sitio y de su idea, por lo que no creo que haya una respuesta definitiva.

Pero, en principio:  - si utiliza un mecanismo de manejo de sesión seguro,  - poner el tiempo de espera a un corto período de tiempo (menos de 5 '),  - asegúrese de que un usuario no pueda hacer clic en un enlace aleatorio y enviar el formulario con contenido personalizado,  - Asegúrate de que nadie pueda repetir las solicitudes.  - asegúrese de que un usuario no pueda inyectar ningún código en el sitio web (como proporcionar un comando que modifique al usuario al que se envía el correo electrónico)  - y finalmente haga que las cookies no contengan ninguna información útil para un tercero (no hay información de identificación, solo un conjunto de números aleatorios y no secuenciales que se vinculan a cierta información sobre el usuario en su base de datos y cuál)  entonces podría estar bien.

En caso de que no lo haya hecho, tal vez debería echar un vistazo al documento top 10 de owasp y la lista de lectura relacionada sobre cómo evitar estas trampas.

también, lo que dijo GdD

    
respondido por el ndp 16.12.2013 - 17:17
fuente

Lea otras preguntas en las etiquetas