[OSM-talk-fr] Bogue d'Osmose (codage XML invalide provenant du serveur Backend)

Philippe Verdy verdy_p at wanadoo.fr
Ven 10 Fév 12:42:34 UTC 2012


Le 10 février 2012 12:56, Jocelyn Jaubert <jocelyn.jaubert at gmail.com> a écrit :
> Bonjour,
>
> (je redirige sur dev-fr où ça a plus sa place)
>
> Le 10 février 2012, Philippe Verdy a écrit :
>
>> 369               self._write(' %s=%s' % (name, quoteattr(value)))
>> 378               self._write(' %s=%s' % (name, quoteattr(value)))
>>
>> En effet, la fonction Python quoteattr() ne représente pas
>> correctement le caractère "&" qu'il laisse sous cette forme, alors
>> qu'il FAUT le réencoder sous la forme "&"
>>
>> La fonction quoteattr() est importée depuis le module Python
>> "sax.saxutils", absent dans les sources GIT d'Osmose. C'est elle qui
>> est ici en cause.
>
> Cette fonction fait parti de la librairie python standard, et sa
> documentation se trouve là:
>
> http://docs.python.org/library/xml.sax.utils.html
>
> D'après la doc, quoteattr() échappe bien les & < et >, donc je ne
> comprends pas le problème.

Tu as une doc à jour, mais pas le module Python à jour qui correspond,
sans doute un module de Python v1. Il y a eu de nombreuses corrections
de sécurité dedans (y compris une correction dans l'ordre de
substitution de "&", uniquement dans Python 2.1.1, puis ensuite des
tentatives  "simplifications" du code sans utiliser escape() en
interne... suivi aussitôt d'une anomalie avec une attaque de sécurité
XSS sur un certain nombre de sites.

C'est pour ça que je t'ai fourni des liens vers des versions
correctes. Car je ne sais pas du tout quelle version tu as chargée et
utilisée (depuis quel repository Python ??? Il y en a plein, pas
toujours conformes à l'original ou ne prenant pas en compte les
corrections pourtant approuvées).

> Est-ce que tu pourrais donner un lien sur osmose.openstreetmap.fr qui
> montrerait le problème ?  (avec le permalink en bas à droite)

Oui, mais j'ai corrigé un problème, il n'apparait plus dans Osmose là
où je l'ai vu la première fois.

J'en ai vu ailleurs dans les noms relations de sites géodésiques (dont
les membres sont des noeuds groupés sur une même collection dont la
relation donne une référence commune avec une URL vers le site de
géosésie de l'IGN, ces URL contenant des "&" puisqu'elles contiennent
des paramètres.

Et j'ai vu ces mêmes URL corrompues par endroit (j'aurais du regarder
l'historique, pour voir que cela venait bien de rawedit).

Si tu n'en voit pas, crée un point avec une erreur de tonomymie dans
JOSM qu'Osmose signalera (par exemple donne un nom comme "BOUTIQUE
C&A", Osmose ralera sur les majuscules, ouvre le noeud signalé. Tu
verras que même sans rien toucher, il refusera la modification. Mets
une URL en valeur contenant des paramètres de requêtes: dans JOSM il
n'est pas nécessaire et on ne doit rien substituer à l'écran, JOSM
fait correctement les encodages et décodage URL quand il utilise l'API
d'OSM (mais pas Osmose aussi bien dans ses URLs insérées dans le
Frontend HTML/CSS/JS que dans le code Javascript qui communique en XML
avec le Backend d'Osmose, qui vérifie la requête puis renvoie vers
l'API d'OSM).

>> ==== Deuxième problème (lié au premier) ===
>>
>> Enfin je note que le code Javascript envoyé au client utilise le
>> constructeur: new XMLHttpRequest(), mais sans préciser le jeu de
>> caractères qui sera utilisé pour dialoguer avec le serveur :
>
> Le fait que la page html et le fichier .js soient encodées en UTF-8 via
> les headers HTTP ne suffit pas à informer le navigateur ?
>
>
> Et est-ce que tu peux donner un exemple d'objet "corrompu" sur OSM ?

Si tu charges une zones assez grande dans JOSM, il suffit de regarder
les valeurs chargées énumérées dans la liste de valeurs existantes
d'un attribut comme "source". Tu y verras des tas de caractères "<?>"
noirs là où auraient du rester des caractères accentués, visiblement
édités sur un navigateur Macintosh; sélectionne cette valeur dans la
liste, uniquement pour la copier dans le presse-papier. Puis recherche
les objets contenant cette valeur incorrecte.

Tu vas en trouver beaucoup.

Ensuite regarde les historiques: tu verras qu'ils proviennent de "rawedit".




Plus d'informations sur la liste de diffusion Talk-fr