При выполнении поисковой строки web api к ней добавляются двойные кавычки, почему и как решить проблему ?
Я работаю над веб api asp.net ядро 2.2 я сталкиваюсь с этой ошибкой
An expression of non-boolean type specified in a context where a condition is expected, near 'and'.
процедура успешно работает на sql server, как показано ниже
exec [dbo].[sp_ReportDetailsGetALL] "2028","2020-05-03","2020-05-11", 'Text6=''locations'''
точно вопрос по следующей строке
'Text6=''locations'''
на веб API я думаю что он добавляет двойные кавычки на начало и конец так что он не работает
json я передал в web API следующим образом :
{ "startdate": "2020-05-03T22:00:00Z", "enddate": "2020-05-11T22:00:00Z", "searchstring": "'Text6=''MFG'''", "reportID": "2028" }
процедура выглядит следующим образом :
declare @ColumnName Nvarchar(max) = (SELECT 'select ' + STUFF((SELECT ',' + 'Text'+CONVERT(varchar(20),ReportHeaderIndex) + ' '+ '['+ReportHeader +']' FROM ReportHeaders where ReportID=@ReportID order by ReportHeaderIndex FOR XML PATH('')) ,1,1,'') + ' , convert(nvarchar(20),[ReportDate]) ReportDate From ReportDetails R where ReportDate >= ''' +@ReportDateFrom+''' and ReportDate <= '''+ @ReportDateTo +''' and R.ReportID =' + @ReportID + ' and '+@SearchString+' and IsHistory=0 order by reportdate desc ' + @SortingColumns AS Txt ) exec (@ColumnName)
Что я уже пробовал:
public DataTable GetReportDetailsSearch(string ReportID, string FromDate, string ToDate, string SearchString) { List<SqlParameter> param = new List<SqlParameter>() { new SqlParameter("@SearchString",SearchString), //val3 SearchString.Replace("\"","") }; DataTable ReportDetailsSearch = SQLDAL.ReturnDataTableByProcedure("sp_ReportDetailsGetALL", param); return ReportDetailsSearch; }
[Route("ReportDetailsSearch")] [HttpPost] public IActionResult GetSearchedData([FromBody] dynamic DataObjectSearch) { string Searchdata = DataObjectSearch.searchstring; var PostSearch = _reportservice.GetReportDetailsSearch(ReportId, StartDate, EndDate, Searchdata); return Ok(PostSearch);
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]