Quelle est la langue du client? Autrement dit, nous devons nous assurer exactement du type de données du nom d'utilisateur et de la méthode Replace en ce qui concerne ce type de données. Aussi comment la concaténation fonctionne pour ce type de données. Il peut y avoir une traduction de jeu de caractères qui traduirait un caractère semblable à un guillemet en UTF-8 en une citation "régulière".
Pour l'exemple très simple, vous montrez que cela devrait marcher, mais les performances seront terribles (selon le commentaire de Thilo). Vous auriez besoin de regarder les options pour CURSOR_SHARING
Pour ce SQL
select * from user where username = '[blah]'
Tant que [bla] ne comprend pas une seule citation, il doit être interprété comme valeur unique CHAR.Si la chaîne contenait plus de 4000 octets, cela provoquerait une erreur et je serais intéressé de voir comment cela a été géré. De même une chaîne vide ou une chaîne composée uniquement de guillemets simples. Les caractères de contrôle (fin de fichier, par exemple) peuvent également poser des problèmes, mais cela peut dépendre de la possibilité de les saisir au début.
Pour un nom d'utilisateur, il serait légitime de limiter le jeu de caractères aux caractères alphanumériques, et éventuellement à un ensemble limité de ponctuation (point et soulignement peut-être). Donc, si vous adoptez une approche de filtrage de caractères, je préférerais une liste blanche de caractères acceptables plutôt que la mise en liste noire de guillemets simples, de caractères de contrôle, etc.
En résumé, en général, la sécurité est faible et les impacts sont négatifs. performance. Dans des cas particuliers, cela pourrait (probablement?) Ne pas exposer de vulnérabilités. Mais vous voudrez faire beaucoup de tests pour être sûr que ce n'est pas le cas.
+1 tout autour ... – DCookie