Acabo de notar que estoy viendo miles de solicitudes de API de usuarios por día a partir de abril de este año en los informes de seguridad del panel.
Esto es muy extraño y está desfasado en un factor de 100 a 1000 con respecto a mis expectativas.
¿Cómo obtengo informes más detallados sobre los usuarios que solicitan claves y qué usuarios realizan cuántas y cuáles solicitudes de API? Si una clave tiene acceso a solicitudes de lectura/escritura, asumo que alguien puede leer y escribir temas/publicaciones de forma remota. ¿Podría ser un sitio remoto que raspa publicaciones?
Además, ¿hay alguna forma de invalidar/expirar globalmente todas las claves de API de usuario?
Solo para confirmar, ¿estás preguntando sobre las solicitudes de API de usuarios y no sobre las solicitudes de API que se han ejecutado con una clave de API que has generado para los usuarios en la página de Administración / API de tu sitio Discourse. Las solicitudes de API de usuarios se resaltan en verde en la captura de pantalla a continuación:
Esto no responde a todas tus preguntas, pero puedes obtener una visión general de cómo se utilizan las claves de API de usuario con la siguiente consulta del Explorador de datos:
SELECT * FROM user_api_keys
Para obtener una lista de las aplicaciones que realizan solicitudes de claves de API de usuario a tu sitio y un recuento del número de usuarios que realizan solicitudes con cada aplicación:
SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name
Las claves de API de usuario que se utilizan para conectarse desde la aplicación DiscourseHub tendrán su application_name establecido en “Discourse - unknown”.
Si un usuario hace uso de una clave de API de usuario para interactuar con el sitio, se agregará una entrada de Aplicaciones a la pestaña de Seguridad de su página de preferencias:
La entrada muestra los alcances que se han otorgado a la aplicación. También te permite revocar el acceso a la aplicación.
No veo ninguna forma de expirar o revocar todas las claves de API de usuario desde la interfaz de usuario de Discourse. Solo existe la opción de revocar una clave a la vez desde las páginas de preferencias de los usuarios. Sería posible revocar todas las claves de API de usuario desde la consola de Rails, pero probablemente valga la pena investigar primero cómo se utilizan las claves.
Parece que son demasiadas solicitudes para provenir de la aplicación DiscourseHub. Si tienes instalado el Explorador de Datos en tu sitio, me interesaría conocer los resultados de esta consulta:
SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name
Probé esa consulta en mi propio sitio de prueba, pero solo tiene una user_api_request de la aplicación DiscourseHub. Creo que he estructurado la consulta correctamente para tratar con múltiples usuarios que se conectan a Discourse desde múltiples aplicaciones, pero házmelo saber si algo en los resultados parece incorrecto.
Me tomó tiempo instalar el explorador de datos, mi reconstrucción falló por alguna razón.
Esto es lo que veo:
application_name
user_count
Discourse - iPhone X de xhanse’s
1
Discourse - iPhone
1
Discourse - iPhone de xrett’s
2
Discourse - iPhone de xave’s
1
Discourse - iPhone de xixu’s
1
Discourse - GS8 de xevin’s
1
He enmascarado algunos de los nombres, esto parece ser solo unos pocos usuarios. ¿La consulta devuelve información para un período de tiempo específico? Me parecen excesivas miles de solicitudes de API para unos pocos usuarios. Además, un usuario parece tener 2 user_count, ¿eso significa que tiene 2 claves de API (es decir, 2 aplicaciones)?
Hay dos posibilidades en ese caso. O el usuario tiene dos iPhones con el mismo nombre de dispositivo O desinstaló la aplicación y la reinstaló en algún momento. En ambos casos, tendrían múltiples claves de API.
No, devuelve detalles sobre todas las claves de API de usuario activas.
Intenta ejecutar la siguiente consulta:
SELECT * FROM user_api_keys
Supongo que solo devolverá 7 filas. Avísame si no es así.
No necesariamente. Cuando los usuarios acceden al sitio a través de la aplicación DiscourseHub, sus solicitudes al sitio cuentan como solicitudes de API de usuario. Si algunos de los usuarios están leyendo activamente el sitio, podrían generar 2000 solicitudes en un día.
Todo me parece razonable. Como contexto, inicié sesión brevemente en mi sitio de prueba hoy a través de la aplicación DiscourseHub. El sitio tiene casi nada de contenido. Navegué por él durante unos minutos y generé 36 solicitudes de API de usuario. En un sitio con mucho contenido para desplazarse, no sería irrazonable que un solo usuario generara muchas solicitudes a lo largo de un día.
Si todavía te preocupa esto, sería posible usar el plugin Data Explorer para examinar la actividad del usuario de aquellos usuarios cuyos user_id se devolvieron de esta solicitud:
La curiosidad me pudo, así que revisé un sitio que uso casi exclusivamente a través de la aplicación DiscourseHub. Tengo poco menos de 1100 solicitudes de clave API de usuario en las últimas 24 horas de ese sitio y soy el único usuario con una clave activa.