Параметры SQL - где использовать - PullRequest
2 голосов
/ 13 октября 2011

Я нахожусь в процессе применения параметров SQL к моему проекту для предотвращения SQL-инъекций.

Добавлять ли параметры к каждому запросу в моем приложении, включая запросы, которые не взаимодействуют с пользователем?

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

Это то, что меня смущает, я тоже добавляю метод параметров в этот запрос, даже если идентификатор ключевого слова не был от пользователя?

Большое спасибо

Ответы [ 2 ]

5 голосов
/ 13 октября 2011

Да, используйте параметризованные запросы в любом месте, где у вас есть параметры.

Тот факт, что сегодня пользовательский ввод не используется для конкретного запроса, не означает, что завтра будет то же самое. Код меняется. Возможно, злоумышленник поймет, как скомпрометировать первый запрос, а затем второй.

Вы должны подумать о глубокой защите .

2 голосов
/ 13 октября 2011

Да, это тоже должен быть параметр.В противном случае вы должны отслеживать, какие значения, которые вы вставили в базу данных, были получены от пользователя - ничто не может помешать названию "'; DROP DATABASE".Если вы слепо доверяете данным из базы данных, подлежащим дезинфекции, то в какой-то момент вы наверняка ошибетесь.Движок SQL будет использовать параметры внутри.Это логика вроде:

var keywordId = sql_exec("SELECT KeywordId FROM Table1 WHERE UserInput = @u", userInput);
var rows = sql_exec("SELECT Rows FROM Table2 WHERE KeywordId = '" + keywordId + "'");

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

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