Oggi stavo guardando una vecchia procedura memorizzata e ho notato che stava usando quotename
i parametri di input. Dopo aver fatto qualche scavo per capire cosa fa esattamente mi sono imbattuto in questo sito . Ora capisco cosa fa e come usarlo, ma il sito dice che viene utilizzato come mitigazione dagli attacchi SQL Injection. Quando ero abituato a sviluppare app che richiedevano direttamente un database, usando asp.net, utilizzavo i parametri ADO.Net per trasmettere l'input dell'utente come valore letterale e non mi preoccupavo davvero di proteggerlo nelle mie procedure memorizzate.
Ora sto scrivendo una procedura memorizzata che verrà utilizzata dalle applicazioni che non scrivo, quindi ho bisogno di provare a proteggere dagli attacchi di iniezione a livello di procedura, è il quotename
modo migliore per farlo o c'è una nuova funzione / migliore metodo?
Codice che mi ha portato su questo modello di pensiero ( @parm1
è un parametro di input dell'utente):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '