Projet

Général

Profil

Bug #10923

Development #10921: api/wscall: ne pas transmettre les fichiers sous forme base64 mais via une URL

api: valider les nonces dans les signatures

Ajouté par Benjamin Dauvergne il y a presque 8 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
Version cible:
-
Début:
13 mai 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Fichiers

Révisions associées

Révision c56fada4 (diff)
Ajouté par Benjamin Dauvergne il y a environ 7 ans

api: check signature's nonce (#10923)

It's mandatory to prevent replays. Request is marked as valid after the first
check so that multiple call to is_url_signed() on the same request do not
fail.

Tests had to be modified so they don't use the same signed URL for their web
service calls.

Historique

#1

Mis à jour par Benjamin Dauvergne il y a presque 8 ans

  • Tracker changé de Development à Bug
#2

Mis à jour par Benjamin Dauvergne il y a presque 8 ans

  • Fichier 0001-api-check-signature-s-nonce-10923.patch ajouté
  • Patch proposed changé de Non à Oui
#3

Mis à jour par Benjamin Dauvergne il y a presque 8 ans

  • Fichier 0001-api-check-signature-s-nonce-10923.patch supprimé
#4

Mis à jour par Benjamin Dauvergne il y a presque 8 ans

Le cronjob pour nettoyer les nonces s'était perdu dans l'autre patch.

#6

Mis à jour par Frédéric Péters il y a plus de 7 ans

Tu aurais une version rebasée sur master ?

#7

Mis à jour par Benjamin Dauvergne il y a plus de 7 ans

Voilà, avec des bouts du #10922, suffisamment pour que celui-ci s'applique. J'ai viré le sleep dans les tests qui faisait perdre 6s (à la place j'ai ajouté la possibilité de passer l'heure courante en paramètre à clean_nonces()). Je n'ai relancé que tests/test_api.py mais tout passe.

#8

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

Rebasé et correction d'un bug suite au passage à pytest > 3 (pytest.raises() nettoie sys.exc_*, il faut utiliser la valeur renvoyer par le context manager à la place).

#9

Mis à jour par Frédéric Péters il y a environ 7 ans

def is_url_signed(utcnow=None, duration=DEFAULT_DURATION):
    if getattr(get_request(), 'signed', False):
        return True

Plutôt que le getattr(), ajouter l'attribut signed dans l'objet ?

#10

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

diff --git a/wcs/api_utils.py b/wcs/api_utils.py
index eaef3fa..d5b61c8 100644
--- a/wcs/api_utils.py
+++ b/wcs/api_utils.py
@@ -33,7 +33,7 @@ DEFAULT_DURATION = 30

 def is_url_signed(utcnow=None, duration=DEFAULT_DURATION):
-    if getattr(get_request(), 'signed', False):
+    if get_request().signed:
         return True
     query_string = get_request().get_query()
     if not query_string:
diff --git a/wcs/qommon/http_request.py b/wcs/qommon/http_request.py
index 2cc4591..9efda02 100644
--- a/wcs/qommon/http_request.py
+++ b/wcs/qommon/http_request.py
@@ -24,6 +24,8 @@ from quixote.errors import RequestError
 from http_response import HTTPResponse

 class HTTPRequest(quixote.http_request.HTTPRequest):
+    signed = False
+
     def __init__(self, *args, **kwargs):
         quixote.http_request.HTTPRequest.__init__(self, *args, **kwargs)
         self.response = HTTPResponse()
#11

Mis à jour par Frédéric Péters il y a environ 7 ans

  • Statut changé de Nouveau à En cours

Ack.

#12

Mis à jour par Benjamin Dauvergne il y a environ 7 ans

  • Statut changé de En cours à Résolu (à déployer)
#13

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF