datos de prueba cifrados en PHP y JS

1

Estoy desarrollando una prueba con la que puedes ganar algunos premios geniales. Por lo tanto, me temo que alguien podría intentar piratearlo / manipularlo.

Todos los participantes deben iniciar sesión y el sitio web toma 15 preguntas de la base de datos, les da a Javascript, que pinta el cuestionario en ese momento. Cuando un usuario termina todas las preguntas o responde una falsa, la prueba realiza una llamada de Ajax al backend e inserta los puntos en la base de datos.

Para decidir qué respuesta (siempre hay 4) es correcta, la prueba debe saber cuál es la correcta. Estos datos se proporcionan como una cadena codificada en Base64 y luego se descodifican en Javascript.
Pregunta 1: ¿Es esto seguro? ¿Hay mejores maneras?

Siempre que se inicia la prueba, guardo el ID de la prueba en la base de datos. Cuando se realiza la llamada Ajax final, verifico esa identificación, verifico si las respuestas dadas son las asociadas con el cuestionario (y el orden de las mismas), verifico un token (hay uno en la sesión y otro en Javascript , ambos generados en base a la prueba y algunos valores de sal, se generan usando md5, sha1 y substr en PHP)
Pregunta 2: ¿Esto es seguro? ¿Hay mejores maneras? ¿Me perdí algo?

    
pregunta wawa 23.01.2015 - 11:59
fuente

1 respuesta

9

Su mecanismo propuesto no es seguro.

Todo lo que esté disponible para JavaScript está disponible para la persona que ejecuta el navegador del cliente. La codificación Base64 oscurece ligeramente las respuestas. Incluso cifrarlos usando un criptográfico fuerte como AES no funcionará porque el JavaScript debe tener la clave.

¿Alguien se tomaría la molestia de averiguar la Base64 o el cifrado? Depende de cómo son geniales los premios y de todos modos es seguridad por oscuridad.

Puedes lidiar con esto de una de las dos maneras. La forma más sencilla es enviar todas las respuestas al servidor al final de la prueba y verificarlas en el servidor con PHP. Si desea proporcionar comentarios para cada pregunta, debe hacer una llamada de Ajax después de que se responda cada pregunta.

Realmente no puedo contar tu segunda pregunta porque no hay suficientes detalles. Sin embargo, todo relacionado con la seguridad debe hacerse en el servidor. Puede pasar una ID de sesión opaca entre el servidor y el cliente, pero no puede hacer nada en el cliente que forme una base para la seguridad del sistema.

Finalmente, me preocupo por "algunos valores de sal". Rodar su propio cripto no es seguro a menos que tenga un Ph.D. En matemáticas y diez o más años de experiencia con criptografía.

    
respondido por el Bob Brown 23.01.2015 - 12:37
fuente

Lea otras preguntas en las etiquetas