Безопасно ли использовать DbCommand.CreateParameter?

Я хочу спросить вас, использую ли я этот метод (DbCommand.CreateParameter) в C# для передачи значения моих параметров в мои хранимые процедуры, тогда я в безопасности от SQL-инъекций? Или что я могу сделать иначе против SQL-Injection?

Заранее большое спасибо!

Что заставляет вас думать, что это может быть «небезопасно»? И каким образом?

Ňɏssa Pøngjǣrdenlarp 06.04.2019 23:58

Параметры в SQL Server всегда защищены от SQL-инъекций, за исключением динамического SQL на стороне сервера.

Dan Guzman 07.04.2019 00:05

@DanGuzman Параметры в SQL Server почти всегда защищены от SQL-инъекций, я видел, как код отправляет пользовательский ввод в параметрах, отправленных командеEXEC. Учитывая, что использование параметров всегда подходит, когда речь идет о SQL-инъекциях.

Gian Paolo 07.04.2019 00:23

Большое спасибо за ваши ответы. Есть какие-то официальные источники, где так написано? Не то чтобы я вам не верил, но я должен доказать эту информацию для моей компании? Это означает, что если я не использую динамически SQL-код, я защищен от SQL-инъекций с параметрами.

Drake 07.04.2019 00:50

@GianPaolo, подробно об этом в моем ответе. Хранимые процедуры сами по себе не предотвращают внедрение, но параметры препятствуют.

Dan Guzman 07.04.2019 01:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
395
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Объекты параметров SQL Server всегда защищены от SQL-инъекций, за исключением динамического SQL на стороне сервера, использующего значения параметров. Это связано с тем, что параметризованные запросы выполняются как Вызов RPC по протоколу TDS. Значения параметров передаются отдельно от оператора в собственном формате и не анализируются сервером как SQL. Поскольку значения параметров не анализируются как элементы языка SQL, значения не могут быть выполнены, и отсутствует уязвимость SQL-инъекций.

Также лучше указать хранимую процедуру командного типа в качестве дополнительного уровня безопасности при вызове хранимых процедур. Это гарантирует, что в тексте команды и параметрах будет указано только имя хранимой процедуры. В противном случае разработчик может непреднамеренно создать текстовую строку команды небезопасным образом (т. е. содержащую как маркеры параметров, так и литеральные значения из ненадежного источника, или даже вообще не использовать параметры).

Другие вопросы по теме