- État Fermée
- Pourcentage achevé
- 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
Concerne le projet: Freebox Server (Ultra V9/ Pop V8/ Delta V7 / Revolution V6 / Mini 4K)
Ouverte par Vinky - 17/01/2013
Ouverte par Vinky - 17/01/2013
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
Chargement...
Activer les raccourcis clavier
- Alt + ⇧ Shift + l Se connecter/Se déconnecter
- Alt + ⇧ Shift + a Ouvrir une tâche
- Alt + ⇧ Shift + m Mes recherches
- Alt + ⇧ Shift + t Rechercher par ID de tâche
Liste des tâches
- o Ouvrir la tâche sélectionnée
- j Déplacer le curseur vers le bas
- k Déplacer le curseur vers le haut
Détails de la tâche
- n Tâche suivante
- p Tâche précédente
- Alt + ⇧ Shift + e ↵ Enter Modifier cette tâche
- Alt + ⇧ Shift + w Surveiller
- Alt + ⇧ Shift + y Fermer cette tâche
Édition de la tâche
- Alt + ⇧ Shift + s Enregistrer la tâche
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 \
http://192.168.1.254/login.php \
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 \
http://192.168.1.254/settings.php?page=net_ipv6 | grep token
Phase 2: Poster dans un formulaire
$ curl \
http://192.168.1.254/ipv6.cgi \
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 \
http://192.168.1.254/ipv6.cgi \
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
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 ?
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
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 !
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.
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
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
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 ...