#c# #sql-server #sql-injection
#c# #sql-сервер #sql-инъекция
Вопрос:
Я хочу спросить вас, использую ли я этот метод (DbCommand.CreateParameter) в C # для передачи значения моих параметров в мои хранимые процедуры, тогда я снова в безопасности от SQL-инъекции? Или что я могу сделать иначе против SQL-инъекции?
Заранее большое вам спасибо!
Комментарии:
1. Что заставляет вас думать, что это может быть «небезопасно»? И каким образом?
2. Параметры в SQL Server всегда защищены от внедрения SQL, за исключением динамического SQL на стороне сервера.
3. @DanGuzman Параметры в SQL Server почти всегда защищены от SQL-инъекции, я видел код, отправляющий пользовательский ввод в параметрах, отправленных
EXEC
команде. Учитывая это, использование параметров — это всегда правильный путь, когда речь идет о внедрении sql4. Большое вам спасибо за ваши ответы. Есть ли какие-либо официальные источники, где это написано? Не то чтобы я вам не верю, но я должен доказать эту информацию для своей компании? Таким образом, это означает, что если я не использую динамически SQL-код, я защищен от SQL-инъекции с параметрами.
5. @GianPaolo, я подробно остановился на этом в своем ответе. Хранимые процедуры сами по себе не предотвращают внедрение, но параметры предотвращают.
Ответ №1:
Объекты параметров SQL Server всегда защищены от внедрения SQL, за исключением динамического SQL на стороне сервера, использующего значения параметров. Это потому, что параметризованные запросы выполняются как RPC-вызов по протоколу TDS. Значения параметров передаются отдельно от инструкции в собственном формате и не анализируются сервером как SQL. Поскольку значения параметров не анализируются как элементы языка SQL, значения не могут быть выполнены, и уязвимость при внедрении SQL отсутствует.
Также лучше указывать хранимую процедуру командного типа в качестве дополнительного уровня безопасности при вызове хранимых процедур. Это гарантирует, что в качестве текста команды указано только имя хранимой процедуры, а параметры передаются отдельно. В противном случае разработчик может непреднамеренно создать текстовую строку команды небезопасным способом (т. Е. содержать как маркеры параметров, так и литеральные значения из ненадежного источника или даже вообще не использовать параметры).