Eu estava olhando para um antigo procedimento armazenado hoje e notei que estava usando quotename
os parâmetros de entrada. Depois de fazer algumas escavações para descobrir o que isso faz exatamente me deparei com este site . Agora eu entendo o que ele faz e como usá-lo, mas o site diz que é usado como atenuação de ataques de injeção de SQL. Quando desenvolvia aplicativos que consultavam diretamente um banco de dados, usando o asp.net, usava os parâmetros do ADO.Net para transmitir a entrada do usuário como um valor literal e nunca me preocupava em protegê-lo nos meus procedimentos armazenados.
Agora estou escrevendo um procedimento armazenado que será usado por aplicativos que não escrevo, por isso preciso tentar me proteger de ataques de injeção no nível do procedimento, é quotename
a melhor maneira de fazer isso ou há uma função mais nova / melhor método?
Código que me levou a esse padrão de pensamento ( @parm1
é um parâmetro de entrada do usuário):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '
fonte