En primer lugar, soy nuevo en todo este asunto de criptografía. Aquí está mi escenario:
Tengo una aplicación de cliente, que envía una cadena de 20 caracteres como máximo a mi servidor. El servidor luego verifica si el nombre coincide con el límite de caracteres, luego registra el nombre, la hora y la IP en una base de datos sqlite3.
Mi problema es que tengo un troll que está empeñado en destruir mi sitio. Primero, no había protección o filtros en los nombres de usuario agregados. Ahora he agregado el filtro de caracteres y también me he asegurado de aceptar solo 1 nombre por dirección IP. Eso funciona, pero ahora creó un bot que le da un nuevo proxy cada vez que realiza la solicitud de obtención.
He cambiado tanto como creo que puedo del lado del servidor, creo que necesito lanzar un parche de aplicación del lado del cliente. También tenga en cuenta que este proceso ocurre una vez por minuto hasta que se cierra la aplicación cliente.
Necesito verificar que la solicitud de obtención proviene de mi aplicación cliente y no de un bot. Este tipo está bastante empeñado en orinar en mi / cualquiera que esté tratando de usar el sitio legítimamente de Cheerios.
Idea 1: creando cheques aleatorios. Proceso: la aplicación del cliente (abreviada a la aplicación) envía una solicitud de token no procesada, el servidor responde con una cadena aleatoria. La aplicación del cliente hace clic en la cadena y responde al servidor con la cadena sin hash y sin hash. El servidor hace el hash en el no dañado, y lo compara con el hash. Si todas las coincidencias, agrega el nombre a la base de datos.
El problema con eso es A) Tengo que asegurarme de que la cadena no dañada no se use más de una vez por período de tiempo, pero podría agregarla a una base de datos y usar Cron o algo para eliminar la base de datos de vez en cuando. B) es que tengo que tener mi algoritmo de hash completamente protegido, tanto en la aplicación como en el servidor. Si rompieron el algoritmo (o simplemente identificaron qué método de hash está usando) podrían construir un bot con eso.
Usaría algo así como un captcha, pero es solo un hilo de fondo que habitualmente envía la solicitud de obtención, no hay interacción del usuario con ella.
Cualquier ayuda o punteros son muy apreciados, gracias si ha superado este texto ...