Je regardais une ancienne procédure stockée aujourd'hui et j'ai remarqué qu'elle utilisait quotename
les paramètres d'entrée. Après avoir creusé pour comprendre ce que cela fait exactement, je suis tombé sur ce site . Je comprends maintenant ce qu'il fait et comment l'utiliser, mais le site dit qu'il est utilisé comme atténuation des attaques par injection SQL. Lorsque je développais des applications qui interrogeaient directement une base de données, en utilisant asp.net, j'utilisais les paramètres ADO.Net pour transmettre l'entrée utilisateur en tant que valeur littérale et je ne me souciais jamais vraiment de la protéger dans mes procédures stockées.
J'écris maintenant une procédure stockée qui sera utilisée par des applications que je n'écris pas, je dois donc essayer de me protéger contre les attaques par injection au niveau de la procédure, est quotename
la meilleure façon de le faire ou existe-t-il une fonction plus récente / meilleure méthode?
Code qui m'a amené sur ce modèle de pensée ( @parm1
est un paramètre d'entrée utilisateur):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '