Projet

Général

Profil

Actions

Anomalie #341

fermé

Erreur lorsqu'un champ du formulaire contient une apostrophe

Ajouté par Leslie Lemaire il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Début:
08/09/2020
Echéance:
% réalisé:

100%

Temps estimé:
# ref:

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

erreur_apostrophe.png (25,6 ko) erreur_apostrophe.png Leslie Lemaire, 08/09/2020 17:50
Actions

Formats disponibles : Atom PDF