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
Début:
13 mai 2016
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Fichiers
Révisions associées
Historique
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
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
- Fichier
0001-api-check-signature-s-nonce-10923.patchsupprimé
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
- Fichier 0001-api-check-signature-s-nonce-10923.patch 0001-api-check-signature-s-nonce-10923.patch ajouté
Le cronjob pour nettoyer les nonces s'était perdu dans l'autre patch.
Mis à jour par Benjamin Dauvergne il y a presque 8 ans
Mis à jour par Benjamin Dauvergne il y a plus de 7 ans
- Fichier 0001-api-check-signature-s-nonce-10923.patch 0001-api-check-signature-s-nonce-10923.patch ajouté
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.
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
- Fichier 0001-api-check-signature-s-nonce-10923.patch 0001-api-check-signature-s-nonce-10923.patch ajouté
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).
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 ?
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
- Fichier 0001-api-check-signature-s-nonce-10923.patch 0001-api-check-signature-s-nonce-10923.patch ajouté
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()
Mis à jour par Benjamin Dauvergne il y a environ 7 ans
- Statut changé de En cours à Résolu (à déployer)
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
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.