Сколько очистки необходимо для веб-служб, которые вызывают хранимые процедуры? - PullRequest
1 голос
/ 12 июля 2009

Я строю серию веб-сервисов в VB.Net

Каждая из веб-служб принимает несколько строковых значений, выполняет некоторую проверку / обработку, а затем вызывает хранимую процедуру, используя Linq to SQL. Часть строки содержит данные пользователя, которые хранятся в базе данных:

Эти строковые значения, передаваемые веб-службой, экранируются, чтобы перехватывать символы одинарных кавычек, точки с запятой и различные типы скобок.

Я вызываю SP с помощью метода datacontext.spname (параметр1, параметр2).

Цель состоит в том, чтобы веб-службы были максимально устойчивыми, но при этом оставались эффективными.

Достаточно ли я сделал, чтобы предотвратить атаки с использованием SQL-инъекций?

Ответы [ 3 ]

3 голосов
/ 12 июля 2009

Обычно вы хороши, но есть несколько предостережений:

  • Осторожно с хранимыми процессами, которые используют sp_executesql или exec. Вы можете передать запрос в параметре и в итоге выполнить его.

  • Осторожнее с разделами запросов LIKE, поскольку их можно расширить на%, если сравнивать с параметром.

  • Поля, используемые на веб-страницах, могут нуждаться в дополнительной обработке перед отправкой, чтобы избежать межсайтовых сценариев. (от которого вы также должны защищаться при извлечении информации)

1 голос
/ 12 июля 2009

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

Что это значит? Вам не нужно беспокоиться о дезинфекции ваших данных, потому что LINQ позаботится об этом. Конечно, вы можете проверить это с помощью простой атаки типа SQL-инъекции - что-то вроде безобидной вставки или выбора.

0 голосов
/ 12 июля 2009

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

Вероятно, плохая идея очищать входные данные в зависимости от данных, которые вы храните. Если вы храните вещи, которые в конечном итоге встроены в веб-страницу, и кодируете / очищаете их при вводе данных, что произойдет, если в вашем санитарном коде есть ошибка? В результате вы получите данные в базе данных, которые вызовут проблемы при выводе, и нет простого способа исправить их без обновления всех ваших данных. Лучше проводить санитарную обработку, когда вы выводите данные, так как исправления в санитарном коде будут работать со всеми данными. У вас также есть преимущество в упрощении поиска в SQL, если это вызывает беспокойство.

Я бы ограничил веб-сервис очевидными вещами, проверками на ноль и диапазон.

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