¿Es mejor clasificar las solicitudes de API de límite según el ID de usuario o la dirección IP de los usuarios autenticados?

0

Estoy pensando en limitar la frecuencia de las solicitudes anónimas basadas en IP, pero para los usuarios con un token de autenticación válido, no puedo decidir si es mejor registrar y limitar la frecuencia de las solicitudes según su ID de usuario o dirección IP.

Opción 1 : 15 solicitudes por minuto por UserId

Opción 2 : 30 solicitudes por minuto por dirección IP

Opción 3 : haz ambas cosas

Si una persona / entidad malintencionada decide ejecutar un ataque de bot contra las API, la mejor opción parece ser limitarlos en función de la dirección IP porque potencialmente pueden tener muchos tokens listos para usuarios con diferentes, por ejemplo, direcciones de correo electrónico (suponiendo que cada usuario se registre con una dirección de correo electrónico única).

Sin embargo, también existe la posibilidad de que un individuo sofisticado pueda cambiar las direcciones IP durante el ataque, pero pase el mismo token de autenticación y abuse del sistema con el mismo UserId.

La tercera opción parece atractiva, pero para mí, significa que cada solicitud de API debe escribirse dos veces en la base de datos (los registros se dividen horizontalmente según UserId y hay otro esquema de partición basado en la dirección IP. Sharding lo hará más fácil para buscar y contar las solicitudes).

¿Existen prácticas recomendadas en cuanto a qué opción (o alguna otra cosa) buscar cuando se limita la tasa de usuarios autenticados? Me gustaría tener una idea general de lo que debo hacer antes de profundizar en escribir toda la lógica de validación.

    
pregunta user246392 13.11.2018 - 19:29
fuente

3 respuestas

0

Yo diría que depende. En general, el bloqueo de IP es una buena práctica porque la IP es el único identificador que existe para los usuarios anónimos. Pero tenga en cuenta que un usuario puede "cambiar" las IP utilizando los servicios de proxy en línea Y, por otra parte, puede que varios usuarios compartan una IP idéntica cuando usan un servidor proxy (lo que suele ser el caso en entornos empresariales).

Si sus usuarios están autenticados, debe bloquear el ID de usuario cuando el usuario está haciendo cosas maliciosas.

Otro aspecto, ¿qué tan fácil es para un usuario anónimo crear una nueva cuenta en su aplicación? Cuando puede crear nuevas cuentas sin problemas, el bloqueo de los ID de usuario es inútil, ya que cuando el usuario de los atacantes no está bloqueado, puede crear fácilmente un nuevo usuario.

Por lo tanto, debe confiar en ambos tecniqus y comprobar qué tan fácil es para una persona crear nuevas cuentas.

    
respondido por el Alex 13.11.2018 - 20:06
fuente
0

Agregaré el uso de geoip, en algunos casos es conveniente que puedas bloquear directamente los países que no tienen nada que pertenezca a tu servicio, así como la lista blanca de los países en los que confías más.

    
respondido por el camp0 13.11.2018 - 22:54
fuente
0

Ambos. Protegen contra diferentes estilos de ataque.

En lugar de fragmentar la base de datos, puede considerar el uso de Fail2Ban para el bloqueo de IP y quedarse con la aplicación / monitoreo interno solo para el bloqueo de usuarios.

Mientras tenga un registro de solicitudes en algún lugar, puede otorgar acceso de lectura a Fail2Ban para hacer su trabajo sin siquiera tocar su base de datos.

Si esta es su aplicación, puede implementar un registro minimalista solo para Fail2Ban. Si es una aplicación comercial, deberá averiguar cómo y dónde se registran las solicitudes de entrada.

    
respondido por el DoubleD 13.12.2018 - 23:23
fuente

Lea otras preguntas en las etiquetas