Я изучаю ядро asp.net и использую некоторое количество Linq для перехода на страницу просмотра бритвы.
На странице есть текстовое поле для поисковых терминов, а также раскрывающийся список выбора категории.
В приведенном ниже коде показаны некоторые части, из которых состоит фактический поиск. Являются ли разделы, закомментированные как уязвимые, плохим способом сделать что-то и открытое для SQL-инъекций?
Если так, какой способ лучше? чтобы справиться с этим?
Я смотрел на такие вещи, как FromSQL и т. д., но я не хочу использовать это, если мне не нужно.
// For search textbox and search category DDL in web page
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
[BindProperty(SupportsGet = true)]
public string CategoryString { get; set; }
// In my page's .cs file .....
List<KnowledgeBaseListVM> kblist = new List<KnowledgeBaseListVM>();
if (!string.IsNullOrEmpty(CategoryString) || !string.IsNullOrEmpty(SearchString))
{
// _context is my db context
var q = (from kb in _context.KnowledgeBase
join c in _context.KnowledgeBaseCategory on kb.CategoryId equals c.Id
orderby kb.Title
select new
{
kb.Id,
kb.DateCreated,
kb.Title,
Category = c.Title,
kb.Text,
kb.CategoryId
}).ToList();
// SearchString - Vulnerable?
if (!string.IsNullOrEmpty(SearchString))
{
q = q.Where(s => s.Category.ToLower().Contains(SearchString.ToLower()) || s.Title.ToLower().Contains(SearchString.ToLower()) || s.Text.ToLower().Contains(SearchString.ToLower())).ToList();
}
// Search Category - Vulnerable?
if (!string.IsNullOrEmpty(CategoryString))
{
q = q.Where(s => s.CategoryId == int.Parse(CategoryString)).ToList();
}
}
S