Anomalie #341
ferméErreur lorsqu'un champ du formulaire contient une apostrophe
100%
Description
AsgardManager a planté alors que je tentais de valider un formulaire avec la valeur "Zones d'activités" dans le champ niv2.
Cf. message d'erreur en pièce-jointe. J'en comprends qu'AsgardManager ne double pas les apostrophes dans les chaînes de caractères envoyées au serveur, ce qui est confirmé par le fait que si j'écris à la place "Zones d''activités" (en doublant l'apostrophe), j'obtiens le résultat voulu.
On pourrait exiger des utilisateurs qu'ils se chargent eux-mêmes de doubler leurs apostrophes... mais, au-delà du côté contraignant et peu intuitif, ça ne résoudrait pas le problème : maintenant que j'ai créé mon schéma avec son niv2 "Zones d''activités", AsgardManager me l'affiche (comme il se doit) comme "Zones d'activités" dans le formulaire. Donc si je ré-appuie sur Appliquer, ça replante. Autrement dit, il faudrait que l'utilisateur pense à aller doubler les apostrophes dans des champs qu'il n'a même pas modifiés, ça devient l'horreur.
Je suis allée jeter un oeil à ce qui était dit dans la doc de psycopg sur la bonne manière de gérer cette question :
https://www.psycopg.org/docs/usage.html#the-problem-with-the-query-parameters + généralités sur la gestion des variables dans les requêtes : https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries... Et j'ai l'impression que ce qu'ils recommandent n'a absolument aucun rapport avec ce que tu as fait - tu n'utilises jamais le deuxième paramètre de cursor.execute() pour autant que je puisse voir. Je ne me rends vraiment pas compte de la difficulté qu'il y aurait à combiner les deux pour conserver l'efficacité de ta méthode tout en rendant ça plus robuste (alimenter de manière dynamique le second paramètre de la fonction execute(), en somme).
NB : ce serait sans doute à confirmer, mais je ne crois pas qu'il y ait véritablement de problème de sécurité dans notre cas. Pour ce que je comprends des injections SQL, ça n'a d'intérêt que si l'applicatif se connecte en root sur le serveur. Là l'application n'a que les droits explicitement conférés à l'utilisateur... qui ne pourra rien faire en injectant du code dans AsgardManager qu'il n'aurait pu faire directement - et beaucoup plus simplement - dans l'éditeur de requêtes de pgAdmin. Par contre il y a une vraie question de robustesse.
Fichiers
Mis à jour par Didier LECLERC il y a environ 4 ans
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 10
Leslie, le second argument de cursor.execute(), n'a rien de particulier mais correspond à la méthode de formatage d'instruction que j'utilise pour débugger.
Exemple :
mVar = "mDicExpRegul['Find_(FirstCar_)&Ret_FirstCar']"
print("Bonjour, ceci est un test pour " + str(mVar))
que l'on transforme en :
print("Bonjour, ceci est un test pour %s" %(str(mVar)))
Je vois les impacts et teste pour rendre robuste, ou j'ai une autre solution, mais je verrai.
Mis à jour par Didier LECLERC il y a environ 4 ans
- Statut changé de En cours à Fermé
- % réalisé changé de 10 à 100
Corrigé dans la version 0.4.4
Mis à jour par Didier LECLERC il y a environ 4 ans
- Version cible mis à ASGARD MANAGER version 1.0.0