Bug #31274
iparapheur: désactiver basic_authentication pour certaines url
0%
Description
Au chargement du WSDL d'iParapheur:
- le wsdl est protégé par basic_authentication
- la ressource (incluses comme import dans le wsdl d'iParapheur) 'http://www.w3.org/2005/05/xmlmime' qui est accessible sur un serveur public, génère une erreur 401 si on y accède en proposant une basic_authentication.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Nicolas Roche il y a environ 5 ans
- Lié à Support #31120: iparapheur: passer ce connecteur à zeep ajouté
Mis à jour par Nicolas Roche il y a environ 5 ans
- Fichier 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch ajouté
- Tracker changé de Support à Bug
- Description mis à jour (diff)
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Premier jet (merci Thomas).
Ce patch permet d'accéder au site w3.org sans basic_authentication.
Il généralise l'accès public à ce site pour l'ensemble des connecteurs utilisant SOAPClient.
Ce patch devra également reprendre les tests pour coller aux mieux aux tests directs sur une vraie instance (Rouen).
Mis à jour par Thomas Noël il y a environ 5 ans
En parcourant le web mais aussi nos wsdl dans tests/data/, on voit aussi des imports depuis schemas.xmlsoap.org : j'ajouterais bien ce site en exception à côté de www.w3.org
Ensuite, c'est mon avis, peut-être d'autres diront autre chose, mais je préférerais que _load_remote_data appelle le super() par défaut, genre :
def _load_remote_data(self, url): if urlparse(url).hostname in ['www.w3.org', 'schemas.xmlsoap.org']: response = self.session.get(url, timeout=self.load_timeout, auth=None, cert=None) response.raise_for_status() return response.content return super(SOAPTransport, self)._load_remote_data(url)
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
à mon avis le problème est plus grave que cela, en vrai on distribue nos login/mots de passe à la terre entière sauf w3.org, c'est pas super mieux. On ne sait pas forcément si un connecteur ne va pas faire des appels à droite à gauche (d'autant plus les connecteurs SOAP qui font des appels basé sur des URLs venant de documents qu'on ne maîtrise pas). Ça fera un autre ticket pour plus tard.
Mis à jour par Thomas Noël il y a environ 5 ans
Benjamin Dauvergne a écrit :
À mon avis le problème est plus grave que cela, en vrai on distribue nos login/mots de passe à la terre entière sauf w3.org, c'est pas super mieux.
Excellente remarque. Nicolas, voilà un bon nouvel exercice :)
Mis à jour par Nicolas Roche il y a environ 5 ans
- Fichier 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch ajouté
basic_authentication uniquement pour les services pointés par le WSDL.
(j'imagine que l'adresse basée sur l'url du WSDL ne suffira pas mais c'est pour avoir un premier avis sur cette solution).
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
À mon avis il faudra penser à une solution au niveau de self.requests pour plus tard, mais comme ça c'est bien.
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Statut changé de Solution proposée à Solution validée
Ça mériterait un test pour valider qu'on ne reçoit pas login/mdp sur une URL quelconque.
Mis à jour par Nicolas Roche il y a environ 5 ans
- Fichier 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch ajouté
- Statut changé de Solution validée à Solution proposée
Je me suis trop avancé, c'est compliqué de récupérer les urls des services SOAP (je tourne en rond) :
pour faire du code propre (concis) il faudrait les récupérer après que le wsdl soit parsé,
or ces urls serviront justement pour récupérer le wsdl et ses imports.
Idem, en fait pas besoin de correction des tests, les messages retournés sont conformes avec ce que l'i-parapheur de Rouen renvoi.
Donc :
- filtrage des url basé sur l'host de l'url du wsdl fournie pour activer basic_authentication
- ajout d'un test sur ce filtrage
- ajout de certains tests manquants
- je n'ai pas corrigé les exception levées volontairement dans le code qui sortent en erreur 500 (autre ticket à venir)
Dites-moi...
Mis à jour par Frédéric Péters il y a environ 5 ans
Il y a une erreur de build mais ça ne doit pas avoir de rapport.
from urlparse import urlparse
, tire le plutôt de django.utils.six (from django.utils.six.moves.urllib import parse as urlparse
).
À part ça, le filtrage fait ainsi, ça me semble bien suffisant.
Mis à jour par Nicolas Roche il y a environ 5 ans
- Fichier 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch 0003-iparapheur-resolv-no-basic_authentication-on-w3.org-.patch ajouté
- utilisation de django.utils.six.moves.urllib
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Statut changé de Solution proposée à Solution validée
Ack.
Mis à jour par Nicolas Roche il y a environ 5 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 00211a4cc84101e0ed7b28c62e11942f9a0d49d1 (HEAD -> master) Author: Nicolas ROCHE <nroche@entrouvert.com> Date: Fri Mar 8 12:08:19 2019 +0100 iparapheur: resolv no basic_authentication on w3.org (#31274)
Mis à jour par Frédéric Péters il y a environ 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Benjamin Dauvergne il y a environ 5 ans
- Statut changé de Solution déployée à Fermé
iparapheur: resolv no basic_authentication on w3.org (#31274)