Patrzyłem dziś na starą procedurę składowaną i zauważyłem, że używała quotename
parametrów wejściowych. Po kilku kopaniach, aby dowiedzieć się, co to dokładnie zrobiłem, natknąłem się na tę stronę . Teraz rozumiem, co robi i jak go używać, ale strona twierdzi, że jest on używany jako środek łagodzący ataki SQL Injection. Kiedy tworzyłem aplikacje, które bezpośrednio przeszukiwały bazę danych, używając asp.net, korzystałem z parametrów ADO.Net, aby przekazywać dane wejściowe użytkownika jako dosłowną wartość i nigdy tak naprawdę nie martwiłem się o ich ochronę w moich procedurach przechowywanych.
Piszę teraz procedurę przechowywaną, która będzie używana przez aplikacje, których nie piszę, więc muszę próbować chronić się przed atakami wstrzykiwania na poziomie procedury, jest quotename
to najlepszy sposób, aby to zrobić, lub czy jest dostępna nowsza funkcja / lepsza metoda?
Kod, który doprowadził mnie do tego wzorca myślenia ( @parm1
jest parametrem wejściowym użytkownika):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '
źródło