Milhares de requisições de API de usuários e invalidação

Acabei de notar que estou vendo milhares de solicitações de API de usuários por dia a partir de abril deste ano nos relatórios de segurança do painel.

Isso é muito estranho e está fora de 100 a 1000 vezes minhas expectativas.

Como obtenho relatórios mais detalhados sobre quais usuários estão solicitando chaves e quais usuários estão fazendo quantas e quais solicitações de API? Se uma chave tiver acesso a solicitações de leitura/gravação, presumo que alguém possa ler e gravar tópicos/postagens remotamente. Poderia ser um site remoto raspando postagens?

Além disso, existe uma maneira de invalidar/expirar globalmente todas as chaves de API de usuário?

1 curtida

Apenas para confirmar, você está perguntando sobre solicitações de API de Usuário e não sobre solicitações de API que foram executadas com uma chave de API que você gerou para usuários na página Admin / API do seu site Discourse. As solicitações de API de Usuário são destacadas em verde na captura de tela abaixo:

Detalhes sobre para que as Chaves de API de Usuário são usadas estão aqui: User API keys specification.

A menos que você tenha criado um aplicativo que se integra ao seu site Discourse, as explicações mais prováveis são que os usuários estão acessando o site através do aplicativo DiscourseHub (https://play.google.com/store/apps/details?id=com.discourse&hl=en&gl=US&pli=1) ou eles estão usando um aplicativo semelhante a Fig - Native Discourse client for iOS para interagir com o site.

Isso não responde a todas as suas perguntas, mas você pode obter uma visão geral de como as chaves de API de Usuário estão sendo usadas com a seguinte consulta do Data Explorer:

SELECT * FROM user_api_keys

Para obter uma lista de aplicativos que estão fazendo solicitações de chave de API de Usuário para o seu site e uma contagem do número de usuários que estão fazendo solicitações com cada aplicativo:

SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name

As chaves de API de Usuário que estão sendo usadas para conectar do aplicativo DiscourseHub terão seu application_name definido como “Discourse - unknown”.

Se um usuário fizer uso de uma chave de API de Usuário para interagir com o site, uma entrada de Aplicativos será adicionada à guia Segurança da página de suas preferências:

A entrada mostra os escopos que foram concedidos ao aplicativo. Ela também permite revogar o acesso ao aplicativo.

Não estou vendo nenhuma maneira de expirar ou revogar todas as chaves de API de Usuário da interface do Discourse. Existe apenas a opção de revogar uma chave por vez nas páginas de preferências dos usuários. Seria possível revogar todas as chaves de API de Usuário do console Rails, mas provavelmente vale a pena investigar como as chaves estão sendo usadas primeiro.

1 curtida

Obrigado, sim, são solicitações da API do usuário

1 curtida

Parece que são muitas requisições para serem provenientes do aplicativo DiscourseHub. Se você tiver o Data Explorer instalado em seu site, ficaria curioso sobre os resultados desta consulta:

SELECT
application_name,
COUNT(application_name) AS user_count
FROM user_api_keys
GROUP BY application_name

Eu testei essa consulta em meu próprio site de teste, mas ele tem apenas uma user_api_request do aplicativo DiscourseHub. Eu acho que estruturei a consulta corretamente para lidar com vários usuários se conectando ao Discourse de vários aplicativos, mas me avise se algo nos resultados parecer estranho.

1 curtida

Demorou um tempo para instalar o explorador de dados, minha reconstrução falhou por algum motivo.

É isto que vejo:

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

Mascarei alguns nomes, parece que são apenas alguns usuários. A consulta está retornando informações para um período específico? Milhares de solicitações de API para alguns usuários parecem excessivas para mim. Além disso, um usuário parece ter 2 user_count, isso significa que ele tem 2 chaves de API (ou seja, 2 aplicativos)?

1 curtida

Existem duas possibilidades para isso. Ou o usuário tem dois iPhones com o mesmo nome de dispositivo OU ele desinstalou o aplicativo e o reinstalou em algum momento. Em ambos os casos, ele teria várias chaves de API.

1 curtida

Não, ela está retornando detalhes sobre todas as chaves de API de usuário ativas.

Tente executar a consulta abaixo:

SELECT * FROM user_api_keys

Presumo que ela retornará apenas 7 linhas. Me avise se não for o caso.

Não necessariamente. Quando os usuários acessam o site pelo aplicativo DiscourseHub, suas solicitações ao site contam como solicitações de API de Usuário. Se alguns dos usuários estiverem lendo ativamente o site, eles podem gerar 2 mil solicitações em um dia.

Sim, isso está correto, vejo apenas 7 itens.

Isso significa que está tudo certo? Não sei o contexto aqui, essa é uma carga normal para o fórum lidar?

Tudo parece razoável para mim. Para contexto, acessei brevemente meu site de teste hoje através do aplicativo DiscourseHub. O site tem quase nenhum conteúdo. Naveguei por ele por alguns minutos e gerei 36 solicitações de API de usuário. Em um site com muito conteúdo para rolar, não seria irrazoável que um único usuário gerasse muitas solicitações ao longo de um dia.

Se você ainda estiver preocupado com isso, seria possível usar o plugin Data Explorer para analisar a atividade do usuário para os usuários cujo user_id foram retornados desta solicitação:

SELECT * FROM user_api_keys
1 curtida

A curiosidade falou mais alto, então verifiquei um site que uso quase exclusivamente pelo aplicativo DiscourseHub. Tenho pouco menos de 1100 solicitações de chave de API de usuário nas últimas 24 horas desse site e sou o único usuário com uma chave ativa. :slight_smile:

2 curtidas