Я вызываю системную хранимую процедуру для пакета полнотекстового поиска. Он генерирует термины, используемые для полнотекстового поиска, на основе литерала 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 будет передан в качестве параметра команды?