Bug #104070
lors de la signature d'une URL, les paramètres vides de la query string sont effacés
0%
Description
Lors de la décomposition de la query-string d'une URL pour en préparer la signature, on fait un « parse_qsl » :
# extrait de wcs/api_utils.py def sign_url_auto_orig(url): try: signature_key, orig = get_secret_and_orig(url) except MissingSecret: return url parsed = urllib.parse.urlparse(url) querystring = urllib.parse.parse_qsl(parsed.query) querystring.append(('orig', orig)) querystring = urllib.parse.urlencode(querystring) url = urllib.parse.urlunparse(parsed[:4] + (querystring,) + parsed[5:6]) return sign_url(url, signature_key)
Or parse_qsl a une option keep_blank_values à False par défaut : https://docs.python.org/3/library/urllib.parse.html#urllib.parse.parse_qsl
Ce qui fait que si on a un « ?vide=&foo=bar » on a juste « ?foo=bar » dans la requête reconstituée. Ça devient un bogue quand un système tiers a besoin de l'argument vide.
Je pense qu'on pourrait sans dommage ajouter un keep_blank_values=True sur le/les parse_qs(l) (et peut-être à d'autres endroits où on fait l'analyse de querystring).
Associated revisions
data sources: keep empty query parameters in signed URL (#104070)
History
Updated by Robot Gitea about 2 months ago
- Status changed from Nouveau to En cours
- Assignee set to Frédéric Péters
Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/2264
- Titre : WIP: keep empty query parameters when signing (#104070)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/2264/files
Updated by Frédéric Péters about 2 months ago
Évidemment je fais mon test sur base des appels webservice et ça n'a pas ce comportement, qui est sur les sources de données (l'info était dans le titre du ticket lié).
Updated by Thomas Noël about 2 months ago
Frédéric Péters a écrit :
Évidemment je fais mon test sur base des appels webservice et ça n'a pas ce comportement, qui est sur les sources de données (l'info était dans le titre du ticket lié).
Aïe, désolé, j'avais pensé effectivement que ça concernait les appels d'une façon générale ; tant mieux si c'est seulement sur les sources de données.
Updated by Frédéric Péters about 2 months ago
Ça permet au final d'avoir des tests sur les appels webservice et sur les sources de données, pas plus mal.
Updated by Robot Gitea about 2 months ago
- Status changed from Solution proposée to Solution validée
Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :
Updated by Robot Gitea about 2 months ago
- Status changed from Solution validée to Résolu (à déployer)
Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/2264
- Titre : keep empty query parameters when signing (#104070)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/2264/files
Updated by Transition automatique about 2 months ago
- Status changed from Résolu (à déployer) to Solution déployée
tests: check empty wscall query parameters are kept when signed (#104070)