Предотвращение инъекции SQL с помощью хранимых процедур - PullRequest
2 голосов
/ 28 октября 2011

Я вызываю системную хранимую процедуру для пакета полнотекстового поиска. Он генерирует термины, используемые для полнотекстового поиска, на основе литерала sql.

например: exec ctx_query.explain ('имя_индекса', 'полнотекстовый фильтр', 'таблица объяснения') и т. Д.

Я делаю в своем коде следующее:

using(OracleCommand command = new OracleCommand("ctx_query.explain", DataAccess.GetConnString()))
{   
    comm.Parameters.AddWithValue("index_name", "explain1");
    //comm.Parameters.AddWithValue("text_query", "(test) OR (term1 ACCUM term2");
    comm.Parameters.AddWithValue("text_query", txtUserInput.Text);
    comm.Parameters.AddWithValue("explain_table", "explain_results");
    comm.Parameters.AddWithValue("sharelevel", 0);
    comm.Parameters.AddWithValue("explain_id", new Guid().ToString().Substring(0,30));
    comm.ExecuteNonQuery();    
}

Параметр "text_query" будет построен из пользовательского ввода. Предотвращает ли приведенное выше SQL-инъекцию, поскольку textUserInput.Text будет передан в качестве параметра команды?

1 Ответ

0 голосов
/ 28 октября 2011

ctx_query.explain не выполняет запрос, он только проверяет его, поэтому здесь нет риска внедрения SQL.

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