Project

General

Profile

Bug #104070

lors de la signature d'une URL, les paramètres vides de la query string sont effacés

Added by Thomas Noël about 2 months ago. Updated about 2 months ago.

Status:
Solution déployée
Priority:
Normal
Target version:
-
Start date:
28 March 2025
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

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

Revision 70a82f39 (diff)
Added by Frédéric Péters about 2 months ago

tests: check empty wscall query parameters are kept when signed (#104070)

Revision eac2dc15 (diff)
Added by Frédéric Péters about 2 months ago

data sources: keep empty query parameters in signed URL (#104070)

History

#2

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 :

#3

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é).

#4

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.

#5

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.

#6

Updated by Robot Gitea about 2 months ago

  • Status changed from En cours to Solution proposée
#7

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 :

#8

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 :

#9

Updated by Transition automatique about 2 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF