Я получил следующую строку запросаEntitySQL и SQL инъекции
"SELECT VALUE entity FROM Entities AS entity WHERE entity.Client_id
= 0 && entity.Name LIKE @searchvalue ORDER BY @sorting SKIP @skip LIMIT @limit"
со следующей заменой парам
query.Parameters.Add(new ObjectParameter("skip", start));
query.Parameters.Add(new ObjectParameter("limit", limit));
query.Parameters.Add(new ObjectParameter("searchvalue", searchValue + "%"));
query.Parameters.Add(new ObjectParameter("sorting", sortField + " " + sortDirection.ToUpper()));
Но я всегда в конечном итоге в исключение:
ключевое выражение «ORDER BY» должно иметь как минимум одну ссылку на область непосредственного ввода . Рядом с пунктом ORDER BY пункт
Я предполагаю, что это произошло, потому что query.Parameters.Add(...)
обертывает все в кавычки? Я также читал this, но для чего мне тогда нужен query.Parameters.Add(...)
, если ничего не может произойти? Хорошо, злоумышленник может не запускать новый запрос, но я думаю, что он может манипулировать потоком?
Не знаком с entity-sql, но я думаю, что да, он думает, что, например, 'fieldname asc' - это имя поля, которое вы хотите. Можете ли вы попробовать с помощью '... ORDER BY @sortfield @sortdir ...' и использовать два пакета? –