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

  • État Nouveau
  • Pourcentage achevé
    0%
  • Type Évolution
  • Catégorie Freebox OS → API
  • Assignée à Personne
  • Système d'exploitation Tous
  • Sévérité Haute
  • Priorité Très Basse
  • Basée sur la version 4.7.8
  • Due pour la version Non décidée
  • Échéance Non décidée
  • Votes 1
  • Privée

FS#39081 - Indication du temps d'attente lors d'un "Too Many Requests"

Bonjour,

Je rencontre un problème lors de l’utilisation de l’API. Actuellement, lorsque j’effectue un nombre excessif de requêtes, je reçois en retour le message “Too Many Requests”.

Vu que le blacklistage des machines qui effectuent trop de requêtes est exponentiel (plus on insiste, plus la limitation est longue ; https://https://dev.freebox.fr/bugs/task/19160#comment79018), serait-il possible d’ajouter une indication du temps d’attente nécessaire avant de pouvoir effectuer de nouvelles requêtes ?

Actuellement, nous sommes contraints de réessayer à plusieurs reprises sans savoir exactement dans combien de temps nous pourrons effectuer de nouvelles requêtes. Cela a pour conséquence d’augmenter le temps d’attente si nous essayons de nouveau avant la fin de la période de blocage, ce qui a pour conséquence d’aggraver la situation.

Dans la demande “ FS#19160 “, il était indiqué que “Pour réinitialiser cette limitation il suffit de redémarrer le Server”. Cependant, après avoir essayé cette solution, le problème persiste toujours. Donc l’ajout de cette évolution aiderait grandement.

Je vous remercie par avance pour votre considération de cette demande d’amélioration.

Cordialement

rr a commenté le 26.02.2024 23:24

Le but du blacklist est d'empêcher un pirate d'essayer de prendre la main sur ta box.
Si tu indiquais le temps de blacklist, ça permettrait très simplement d'automatiser la mise en place d'un programme de brute force pour accéder à ta box !

“Pour réinitialiser cette limitation il suffit de redémarrer le Server”. Cependant, après avoir essayé cette solution, le problème persiste toujours

Si après redémarrage, tu as toujours un blocage, ouvre plutôt un nouveau ticket, en expliquant exactement ce que tu fais, et ce qui se passe : s'il y a un bug, il sera plus simple à gérer

nbanba a commenté le 29.02.2024 10:58

Bonjour

J'ai également remarqué que lorsque l'on flood la box avec un peu trop de requêtes API envoyés par curl un peu trop rapidement (temps inférieur à 0.2s entre chaque requêtes), et avant d'atteindre cette limite dont vous parlez, il arrive que la box renvoi une trame VOID provoquant une erreur lors de l'analyse du json qui est égale à "" et dont le parsing échoue en retournant 1 ou error_code mais pas 0 donc échec de la fonction ou de la boucle
Celà arrive notamment lorsque l'on fait des check de validité du SESSION_TOKEN pendant le monitoring d'une tâche longue.

Exemple:
dans le code suivant, si je passe la valeur de sleep à moins de 0.4444 (historiquement 0.1 pour la fluidité du spinner), au bout de 10 minutes (même pas la durée d'expiration du token), la boucle crash sur le call fait par la fonction 'relogin_freebox' qui elle même fait un check du status du token et un nouveau login si le token est expiré

while [[ ${task_result} != "true" ]]; 
                do sleep 1
                task_status=$(call_freebox_api "/vm/disk/task/$resize_vmdisk_task_id") ;
                task_result=$(get_json_value_for_key "${task_status}" result.done)
                echo ${task_status} |grep -q '{"success":true,' >/dev/null \
                && echo -e "${WHITE}task_status: ${norm}${GREEN}${task_status}${norm}" \
                && while [[ ${task_result} != "true" ]];
                do
                        task_status=$(call_freebox_api "/vm/disk/task/$resize_vmdisk_task_id")
                        task_result=$(get_json_value_for_key "${task_status}" result.done)
                        local temp=${spinstr#?}
                        printf "    [%c]    " "$spinstr"
                        local spinstr=$temp${spinstr%"$temp"}
                        sleep .4444
                        printf "${WHITE}  resizing disk: $(echo ${disk_path}|base64 -d) ...${norm}\r"
                        relogin_freebox        
                done \
                && printf "\r" \
                || echo -e "${WHITE}task_status: ${norm}${RED}${task_status}${norm}"
                done \


Il serait bien d'avoir les timers de l'API (rate, limite de requêtes, etc…)
Merci

Cordialement
nbanba


Chargement...

Activer les raccourcis clavier

Liste des tâches

Détails de la tâche

Édition de la tâche