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