TableAdapters SQL-инъекция - PullRequest
       7

TableAdapters SQL-инъекция

2 голосов
/ 27 февраля 2009

Привет! Я использую набор данных, и в этом наборе данных у меня есть адаптер таблицы. В моей таблице адаптеров я использовал хранимые процедуры в качестве запросов. Если я использую следующие строки для вставки данных формы с помощью моего табличного адаптера, безопасен ли он от внедрения SQL? Спасибо.

UserDataSetTableAdapters.UserInformationTableAdapter myFactory = new TestProject.UserDataSetTableAdapters.UserInformationTableAdapter();
            myFactory.spTest_InsertUserInformation(id, frmAddress);

Ответы [ 4 ]

4 голосов
/ 27 февраля 2009

Без публикации кода вашей хранимой процедуры невозможно ответить на ваш вопрос, но вы, вероятно, сможете ответить на него самостоятельно.


Атаки 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. Большинство делают это правильно, но если вы пользуетесь услугами стороннего поставщика, вам следует проверить это дважды, прежде чем предположить, что вы в безопасности.

1 голос
/ 27 февраля 2009

краткий ответ: Да:)

Обновление 1: Даже если вы не использовали хранимую процедуру и определяли запросы с параметрами на адаптере, это было бы безопасно от внедрения SQL, т.е. выберите f1, f2, где f3 = @myparameter ... это будет использовать подготовленный запрос.

0 голосов
/ 04 марта 2010

Если вы используете динамический SQL в самом процессе, который использует EXEC (@SQL), а не sp_executesql с параметрами , тогда вы не в безопасности, иначе вы

0 голосов
/ 27 февраля 2009

Проверка с использованием трассировки SQL Prolier. Если базовый API безопасен, вы увидите параметризованные команды T-SQL, что-то вроде sp_executesql.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...