SSO et IPs filtrées

Nous utilisons l’authentification unique (SSO) pour la connexion et la création de compte. Il n’existe aucune autre méthode pour se connecter ou s’inscrire sur notre forum.

Cependant, la liste des adresses IP filtrées contient des dizaines d’adresses IP qui sont ajoutées automatiquement chaque jour. Cela est-il attendu ? Quels sont les critères qui font qu’une adresse IP est ajoutée à la liste des adresses IP filtrées ?

1 « J'aime »

La seule méthode qui me vient à l’esprit consiste à supprimer un compte et à cliquer sur le bouton « supprimer le spammeur ».

2 « J'aime »

Bonne remarque — c’est lorsque nous supprimons un compte via l’API que l’adresse IP est ajoutée aux adresses IP filtrées.

Cependant, nous émettons la requête DELETE avec block_ip=false. Voici ce que montrent les journaux Rails :

Parameters: {"delete_posts"=>"1", "block_email"=>"0", "blocked_urls"=>"0", "block_ip"=>"0", "id"=>"123"}

Pourtant, les adresses IP sont toujours bloquées. Il y a peut-être un bug quelque part ?

1 « J'aime »

C’est possible, bien que je ne pense pas ? J’utilise le seul point de terminaison supprimer un utilisateur que j’ai trouvé :

DELETE /admin/users/{id}.json

qui possède bien un paramètre block_ip par défaut à true et que je définis toujours à false. Pourtant, les adresses IP sont ajoutées aux adresses IP filtrées.

Vous voudrez peut-être consulter Reverse engineer the Discourse API pour voir exactement quelles requêtes sont envoyées lorsque vous supprimez un utilisateur et que vous appuyez sur le bouton indiquant Supprimer uniquement

… car je peux vous affirmer que si vous voyez des adresses IP être ajoutées à la liste filtrée après la suppression, vous supprimez absolument l’utilisateur en tant que spammeur, c’est-à-dire en utilisant le bouton du milieu — supprimer et bloquer.

2 « J'aime »

J’avais déjà fait cela, et le point de terminaison de l’API de suppression est celui que j’utilise, le même pour les deux actions (suppression uniquement et suppression et blocage) — la seule différence réside dans les paramètres qui l’accompagnent (block_ip, block_email, …) que j’ai mentionnés plus haut.

Je pense avoir enfin compris ce qui clochait dans mes requêtes : l’API de Discourse attend les chaînes ‘true’ et ‘false’ plutôt que des valeurs truthy/falsy. C’est de ma faute de ne pas avoir remarqué cette précision dans la documentation.

C’était probablement la cause de tout ce chaos.

2 « J'aime »

J’ai peut-être parlé trop vite. :disappointed_face:

Après avoir corrigé les paramètres truthy/falsy en chaînes ‘true’/‘false’, je vois toujours des entrées ajoutées dans les adresses IP filtrées et les e-mails filtrés lors de la suppression d’utilisateurs.

Voici les logs Rails pour un appel API :

Started DELETE "/admin/users/9553.json" for 123.123.123.123 at 2021-06-10 00:01:21 +0000
Processing by Admin::UsersController#destroy as JSON
  Parameters: {"delete_posts"=>"false", "block_email"=>"false", "blocked_urls"=>"false", "block_ip"=>"false", "id"=>"9553"}
Can't verify CSRF token authenticity.
  Rendering text template
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Completed 418  in 8ms (Views: 1.4ms | ActiveRecord: 0.0ms | Allocations: 2301)

Et voici la requête effectuée via l’interface web plutôt que par l’API :

Started DELETE "/admin/users/49.json" for 123.123.123.123 at 2021-06-10 08:24:47 +0000
Processing by Admin::UsersController#destroy as JSON
  Parameters: {"context"=>"/admin/users/49/XXX", "delete_posts"=>"true", "id"=>"49"}
  Rendered text template (Duration: 0.0ms | Allocations: 1)
Completed 418  in 23ms (Views: 4.7ms | ActiveRecord: 0.0ms | Allocations: 1778)

Ainsi, après quelques tests, il semble que les paramètres de l’endpoint API /admin/users/{id}.json soient toujours interprétés comme vrais lorsqu’ils sont présents, indépendamment du fait qu’ils soient effectivement définis sur ‘true’ ou ‘false’ ?

Une fois que j’ai commencé à ne définir que les paramètres valant ‘true’ et à ignorer ceux valant ‘false’, aucune nouvelle entrée n’est plus ajoutée aux adresses IP/e-mails filtrés.

Est-ce le comportement attendu ? Ce n’est pas ce que je comprends de la documentation.

2 « J'aime »

Tant que vous avez émulé le comportement que vous observez en suivant le sujet Reverse engineer the Discourse API, vous devriez être bon. Quelles appels API observez-vous dans le moniteur réseau lorsque vous appuyez sur le bouton « supprimer uniquement » ?

1 « J'aime »

Dans certains cas, lorsque le JavaScript ne transmet pas explicitement false au serveur, ce dernier considère toute valeur présente comme vraie. C’est probablement ce à quoi vous êtes confronté ici.

3 « J'aime »