Suivi — Tribune La tribune ne permet plus aux clients externes de poster

#1820 Posté par  (site web personnel) . État de l’entrée : invalide. Assigné à Bruno Michel. Licence CC By‑SA.
Étiquettes : aucune
6
25
juin
2018

Depuis la dernière mise à jour, le BoardsController vérifie à nouveau la validité de l'authenticity_token pour accepter un post sur la tribune.

Cela empêche les clients externes, qui n'ont pas accès à ce token, de poster, ce qui représente probablement 80% des utilisateurs de la tribune.

Je ne suis pas sûr de comprendre la raison des commits :

    Accept the referer for voting on poll (instead of authenticity token)

diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb
index d2ddd8ca..466bbfef 100644
--- a/app/controllers/boards_controller.rb
+++ b/app/controllers/boards_controller.rb
@@ -32,10 +32,6 @@ protected
     params.require(:board).permit(:object_type, :object_id, :message)
   end

-  def verify_referer_or_authenticity_token
-    request.referer =~ /^https?:\/\/#{MY_DOMAIN}\// or verify_authenticity_token
-  end
-
   def expire_cache
     expire_page action: :show, format: :xml
   end
    Kill verify_referer_or_authenticity_token

diff --git a/app/controllers/boards_controller.rb b/app/controllers/boards_controller.rb
index c6508f07..1ffe4a7b 100644
--- a/app/controllers/boards_controller.rb
+++ b/app/controllers/boards_controller.rb
@@ -1,7 +1,5 @@
 # encoding: utf-8
 class BoardsController < ApplicationController
-  skip_before_action :verify_authenticity_token
-  before_action :verify_referer_or_authenticity_token, only: [:create]
   before_action :authenticate_account!, only: :create
   after_action :expire_cache, only: [:create]
   caches_page :show, if: Proc.new { |c| c.request.format.xml? }

Ça l'air d'avoir un rapport avec les sondages, mais je ne vois pas le rapport entre le BoardsController et les sondages, mais voilà.

J'ai une pull request ici : https://github.com/linuxfrorg/linuxfr.org/pull/227

qui re-désactive verify_authenticity_token au post sur la tribune (sans toutefois remettre toute la fonction verify_referer_or_authenticity_token parce que j'imagine qu'elle a disparu pour une bonne raison).

  • # Spécifications

    Posté par  . Évalué à 4 (+0/-0).

    Bonjour,
    Existe-t-il une spécification sur la tribune ? Je suis en train de développer un client GTK+ pour la tribune et j'arrive à récupérer les messages au format tsv mais je sèche pour la méthode POST.

    • [^] # Re: Spécifications

      Posté par  (site web personnel) . Évalué à 1 (+0/-0).

      Il y a quelques infos ici https://linuxfr.org/wiki/tribune notamment l'URL d'envoi, mais tu tombes à un bien mauvais moment puisque depuis hier la tribune de Linuxfr ne fonctionne plus avec aucun client à moins de faire des trucs tordus.

      Normalement c'est très simple, tu dois juste envoyer un POST avec un paramètre message, et le message que tu veux poster. Le header user-agent indique ton nom si tu es anonyme (pour la plupart des tribunes, mais le post anonyme n'est pas autorisé sur Linuxfr) et pour l'authentification il n'y rien d'autre que le cookie (à récupérer à partir d'un navigateur après s'être loggué).

      Mais depuis hier, pour pouvoir poster sur Linuxfr il faut aussi envoyer le cookie remember_account_token (qui a une durée de vie limitée, mais à voir) et authenticity_token comme paramètre de POST, qui doit être récupéré à partir d'une session existante en postant sur la tribune à partir de l'interface web. C'est inutile sur les autres tribunes plus normales.

    • [^] # Re: Spécifications

      Posté par  (site web personnel) . Évalué à 2 (+0/-0).

      Une fois que tu auras réussi à GETer et à POSTer, tu pourras consulter https://rfm.bci.im/ pour le format des messages et des norloges.

      Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

      • [^] # Re: Spécifications

        Posté par  . Évalué à 2 (+0/-0).

        Merci pour le lien !

        • [^] # Re: Spécifications

          Posté par  . Évalué à 3 (+0/-0).

          Ouais alors pour info c'est à prendre avec de très grosses pincettes cette pseudo "norme" hein

          Parce que bon ça a été écrit par et pour une seule moule qui a pris le soin d'y faire passer pour "norme" des choses qu'il est le seul à faire en mode passage en force (en particulier pour ce qui concerne les norloges).

          Je t'invite donc à poser des questions sur la tribune et interagir avec elle pour comprendre son fonctionnement et les us et coutumes de ses pratiquants (et oui le troll en fait partie comme tu peux le constater).

          • [^] # Re: Spécifications

            Posté par  (site web personnel) . Évalué à 2 (+0/-0).

            Parce que bon ça a été écrit par et pour une seule moule qui a pris le soin d'y faire passer pour "norme" des choses qu'il est le seul à faire en mode passage en force (en particulier pour ce qui concerne les norloges).

            Une accusation injuste: c'est ainsi que fonctionne la moulosphère depuis la nuit des temps. RFM est juste une compil à laquelle tout le monde peut contribuer.

            Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

  • # Non

    Posté par  (site web personnel) . Évalué à 3 (+0/-0).

    Ruby on Rails a une protection pour éviter les attaques dites CSRF (Cross Site Request Forgery). Cette protection se base sur un jeton envoyé via les formulaires. Il est également possible de s'appuyer sur l'entête HTTP Origin (quand il est disponible) pour détecter qu'une requête provient bien du site initial. C'est ce que le commit cité dans cette entrée de suivi faisait.

    Depuis quelques versions, Rails a modifié son code et a intégré la vérification de l'entête HTTP Origin. Il n'est donc plus utile d'avoir ce hack. Pire, la documentation de Rails indique maintenant que c'est une mauvaise idée :

    verify_authenticity_token()
    The actual before_action that is used to verify the CSRF token. Don't override this directly.

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.