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