Freebox Server (Ultra V9/ Pop V8/ Delta V7 / Revolution V6 / Mini 4K)

  • État Fermée
  • Pourcentage achevé
    100%
  • Type Anomalie
  • Catégorie Autre / Non trié
  • Assignée à Personne
  • Système d'exploitation Tous
  • Sévérité Basse
  • Priorité Très Basse
  • Basée sur la version 1.1.9.1
  • Due pour la version Non décidée
  • Échéance Non décidée
  • Votes
  • Privée

FS#11638 - Aucune info sur le bug #11570

Bonjour,

J’avais développé sur mon serveur un script me permettant de m’envoyer automatiquement des fichiers sur ma freebox.

La dernière maj à apporté la résolution du bugtracker : #11570

Dans les logs de maj, on nous dit : “Note pour les développeurs d’applications : un CSRF token est maintenant ajouté à toutes les forms, pour vous éviter de devoir le chercher dans le contenu de la page, il est aussi disponible sous forme de header HTTP après la procédure de login.”

Mais lorsque je cherche à aller sur le bugtracker : #11570 on me dit que le lien n’existe pas ou que je n’ai pas les droits.

Comment puis-je faire dans ce cas pour pouvoir adapter mon script afin d’utiliser les jetons ?

Merci de toute aide.

Cordialement

Fermée par  nipo
21.01.2013 14:58
Raison de la fermeture :  Impossible à reproduire
Chef de projet
nipo a commenté le 18.01.2013 13:25

Il n’y a pas d’explication dans #11570. Par contre “il est aussi disponible sous forme de header HTTP après la procédure de login” était relativement explicite:

Phase 1: procédure de login

$ curl \

  1. s -D - -o /dev/null \

http://192.168.1.254/login.php \

  1. d ‘login=freebox&passwd=<le pass>’

HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 18 Jan 2013 13:06:58 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Set-Cookie: FBXSID=”<ID de session>”; Max-Age=86400; HTTPOnly
X-FBX-CSRF-Token: <CSRF token>
Location: /settings.php

On voit dans les headers le cookie de session “FBXSID”, et un token “X-FBX-CSRF-Token”.

Alternativement, le token est dans les forms:

$ curl \

  1. s -b FBXSID=”<ID de session>” -D - -o - \

http://192.168.1.254/settings.php?page=net_ipv6 | grep token

    <input type="hidden" name="csrf_token" value="<CSRF token>" />

Phase 2: Poster dans un formulaire

$ curl \

  1. s -b FBXSID=”<ID de session>” -D - -o /dev/null \

http://192.168.1.254/ipv6.cgi \

  1. d ‘csrf_token=<CSRF token>&enabled=on&method=ipv6.config_set’

HTTP/1.1 302 Moved Temporarily
Server: nginx
Date: Fri, 18 Jan 2013 13:07:12 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Location: http://mafreebox.freebox.fr/settings.php?page=net_ipv6

En se trompant de token:

$ curl \

  1. s -b FBXSID=”<ID de session>” -D - -o /dev/null \

http://192.168.1.254/ipv6.cgi \

  1. d ‘csrf_token=aaa&enabled=on&method=ipv6.config_set’

HTTP/1.1 403 Forbidden
Server: nginx
Date: Fri, 18 Jan 2013 13:08:21 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Location: http://mafreebox.freebox.fr/settings.php?page=net_ipv6

Vinky a commenté le 18.01.2013 14:01

Bonjour,

Tout d’abord merci pour votre retour.

Pour ce qui est de la connexion, j’avais déjà le token qui apparaissait.

Cependant mon souci était (et est car malgré vos commande cela continue) que quoi qu’il arrive je suis interdit (comme si le jeton n’était pas bon)

dans le doute je met ma commande complète (si j’ai fait une erreur de syntaxe cela pourrait expliquer cela, la commande est écrite sur une seule ligne dans le terminal seul l’lP externe de lafreebox a été modifiée)

curl -s -b FBXSID=”7F0XRqHUgN+LYt5rN1RXqd/j7nT4zXddOcqs8KGM3Tq4QCQA5LZurQ4wvTNYmE” -D - -o /dev/null -e http://<MON_IP_EXTERNE>/settings.php?page=net_ipv6 http://<MON_IP_EXTERNE>/ipv6.cgi -d ‘csrf_token=UM47/9D4V38oLAsNZbLWt5BZILr1/JXaqj3fdbUGk+bzj14kImwrV/WUD/DOfL&enabled=on&method=ipv6.config_set’

Encore merci de votre retour.

PS : Dois-je obligatoire être sur le réseau local pour pouvoir réaliser cette commande ?

Vinky a commenté le 18.01.2013 16:24

Après un test à domicile, effectivement, cela fonctionne UNIQUEMENT sur le réseau local :(

Pourquoi cette limitation ? Est-ce un “bug” ou une volonté délibérée ?

Encore merci de votre réponse

Cordialement

zakhar a commenté le 18.01.2013 20:35

Salut Vinky,

(comme dit sur le forum Ubuntu), avant de faire le test avec curl, peux-tu essayer avec l’interface “standard”, c’est à dire avec les pages web que l’on obtient en se connectant à distance à la Freebox.

Si cela ne fonctionne plus à distance avec l’interface standard, alors là oui, on a un bug à remonter à Free, et c’est une assez grosse régression !..
Si ça fonctionne... bah, on se débrouillera !

Vinky a commenté le 18.01.2013 20:47

Salut Zakhar.

Merci de ton retour ;)

Pour répondre à tes questions, oui on a toujours accès à distance à l’interface web aucun souci (et tout fonctionne).

Pour ce qui est des jetons, j’ai bien réussi à les faire fonctionner (cf au dessus) cependant, ça ne marche que sur le réseau local :( Si je met l’IP de la freebox ou le NDD que j’y ai mis, la connexion se fait bien, je peux donc bien récupérer ID et jeton, cependant lorsque je veux envoyer un lien j’ai une erreur 403 forbiden.

Je ne sais donc pas ce qui se passe, là seule chose que je vois c’est une limitation au réseau local à l’image du NAS.

Vinky a commenté le 19.01.2013 16:13

Avec beaucoup d’aide de Zakhar, cela fonctionne à distance à condition d’être beaucoup plus précis dans la commande curl.

Il faut donc envoyer la commande suivante lorsque l’on est sur un réseau distant :

curl -s -b FBXSID=”<Mon_ID>” -D - -o /dev/null -e http://<Mon_IP_Publique>/download.php http://<Mon_IP_Publique>/download.cgi -d ‘csrf_token=<Mon_Token>&method=download.http_add&url=<mon_url>’ -H ‘X-Requested-With: XMLHttpRequest’ -H ‘Accept: application/json, text/javascript, */*’

Merci à vous Nicolas et zakhar.

Cordialement

Vinky a commenté le 19.01.2013 20:51

Pour être toalement précis et que cela fonctionne parfaitement à tous les coups, il faut rajouter l’encodage en url du jeton (sinon dans le cas où le jeton à un caractère sépcial (un ‘+’ en particulier) cela ne fonctionnera pas.

Voici donc :

curl -s -b FBXSID=”<Mon_ID>” -D - -o /dev/null -e http://<Mon_IP_Publique>/download.php http://<Mon_IP_Publique>/download.cgi –data-urlencode “csrf_token=<Mon_Token>” -d “url=<mon_url>&method=download.http_add” -H ‘X-Requested-With: XMLHttpRequest’ -H ‘Accept: application/json, text/javascript, */*’

Cordialement

Chef de projet
nipo a commenté le 21.01.2013 10:24

Pour le coup, seul le problème d’URL-encoding (avec le “+” dans le token) doit être en cause. Vous devriez pouvoir vous passer des -H ...

Chargement...

Activer les raccourcis clavier

Liste des tâches

Détails de la tâche

Édition de la tâche