Estaba viendo un procedimiento almacenado antiguo hoy y noté que estaba usando quotename
los parámetros de entrada. Después de investigar un poco para descubrir qué hace exactamente, me encontré con este sitio . Ahora entiendo lo que hace y cómo usarlo, pero el sitio dice que se usa como mitigación de los ataques de inyección SQL. Cuando solía desarrollar aplicaciones que consultaban directamente una base de datos, usando asp.net, usaba los parámetros ADO.Net para pasar la entrada del usuario como un valor literal y nunca me preocupaba realmente protegerla en mis procedimientos almacenados.
Ahora estoy escribiendo un procedimiento almacenado que será utilizado por aplicaciones que no escribo, así que necesito intentar protegerme de los ataques de inyección a nivel de procedimiento, es quotename
la mejor manera de hacerlo o hay una función más nueva / mejor ¿método?
Código que me llevó a este patrón de pensamiento ( @parm1
es un parámetro de entrada del usuario):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '