Без публикации кода вашей хранимой процедуры невозможно ответить на ваш вопрос, но вы, вероятно, сможете ответить на него самостоятельно.
Атаки SQL-инъекции происходят из-за того, что введенные пользователем данные переходят в динамически генерируемые и выполняемые SQL-запросы. Использование хранимой процедуры обычно позволяет избежать этой проблемы, передавая аргументы в качестве параметров, таким образом не генерируя динамически SQL. Процедуры автоматически инкапсулируются и не становятся частью вашего исходного текста запроса SQL.
Возьмем, к примеру, следующее:
SELECT *
FROM myTable
WHERE myId = @ID;
В качестве параметра вы можете установить @ID
на «21; DROP TABLE myTable;». Он будет экранирован для вас, и вся строка будет сравниваться с myId. Однако, если вы динамически генерируете свой SQL-запрос, такой как
string query = "SELECT *\nFROM myTable\nWHERE myId = " + userEnteredText + ";";
Теперь вы получите следующее:
SELECT *
FROM myTable
WHERE myId = 21; DROP TABLE myTable;;
Уч.
Итак, чтобы ответить на ваш вопрос: если ваша хранимая процедура не генерирует динамически SQL на основе своих параметров и EXEC
их, вы должны быть в безопасности.
Примечание. Это, конечно, зависит от того, что ваш поставщик данных .NET вызывает процедуру с параметрами, а не генерирует динамические операторы SQL. Большинство делают это правильно, но если вы пользуетесь услугами стороннего поставщика, вам следует проверить это дважды, прежде чем предположить, что вы в безопасности.