Я сьогодні переглянув стару збережену процедуру і помітив, що вона використовується quotename
на вхідних параметрах. Після деякого копання, щоб зрозуміти, що це робить саме я натрапив на цей сайт . Зараз я розумію, що це робить і як ним користуватися, але на сайті йдеться, що він використовується як пом'якшення від атак SQL Injection. Коли я розробляв додатки, які безпосередньо запитували базу даних, використовуючи asp.net, я б використовував параметри ADO.Net, щоб передавати введення користувача як буквальне значення, і ніколи не переймався захистом його в своїх збережених процедурах.
Зараз я пишу збережену процедуру, яку використовуватимуть додатки, які я не пишу, тому мені потрібно спробувати захистити від нападів ін'єкцій на рівні процедури, це quotename
найкращий спосіб зробити це чи є нова функція / краще метод?
Код, який отримав мене за цією схемою думки ( @parm1
є вхідним параметром користувача):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '