предотвратить инъекцию sql - PullRequest
2 голосов
/ 07 июля 2011

Есть ли способ предотвратить внедрение SQL с помощью хранимых процедур?

У меня есть запрос SQL как

select column name from table where field ='@value'
cmd.parameters.add('@value', value);

Я использую параметризованные запросы с наименьшими привилегиями.Как я могу написать основную хранимую процедуру, чтобы предотвратить инъекцию SQL.Это возможно?

Ответы [ 4 ]

7 голосов
/ 07 июля 2011
 select column name from table where field =@value

 cmd.parameters.add('@value', value);

Параметры SQL позволяют избежать проблемы внедрения SQL.

Вам просто нужно изменить условие = с помощью параметра.проверьте вышеуказанный запрос.

6 голосов
/ 07 июля 2011

Насколько мне известно, использование одних только параметризованных запросов должно предотвратить атаки SQL-инъекций.

2 голосов
/ 07 июля 2011

Если вы используете параметризованные запросы, вам не нужны кавычки вокруг @value (@value вместо '@value'), если параметр @value определен как строка.

Создание хранимой процедуры работает аналогичным образом. @value будет определяться как VARCHAR или что-то подобное, и поэтому будет принимать только строки. Затем вы ссылаетесь на @value вместо '@value' в хранимой процедуре.

CREATE PROCEDURE my_proc (IN @value VARCHAR(32))
BEGIN
  SELECT column name FROM table WHERE field = @value
END
0 голосов
/ 06 ноября 2012

C #

   cmd.parameters.Add("?value", value);

устарела

чтобы обновить для @Yogesh Bhadauirya,

   cmd.Parameters.AddWithValue("?value", value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...