Я пишу небольшую вспомогательную библиотеку, которая создает некоторый SQL и выполняет это в отношении базы данных SQL Server.Каковы все символы, которые следует избегать из строки, чтобы избежать атак SQL-инъекций в SQL Server?
Я знаю, что наилучшим подходом является использование параметризованных запросов вместо конкатенации строк, но здесь это не вариант, потому что у меня есть требование регистрировать все запросы, которые выполняются в базе данных, простым способом для чтения, при просмотре администратором они могут свободно видеть, какие фактические значения, которые использовались для поиска, приведены в предложении where
.
Каковы все символы, с которыми я должен убежать, прежде чем помещать эту строку в запрос и выполнять ее?
Я знаю, что одна цитата '
является обязательной, но мне нужно заботиться о чем-то еще?
Вот некоторые примеры кода:
var condition = new Condition();
var table = new PersonTable();
condition.Add(table.Name.IsEqualTo("John's"));
это будет преобразовано в
WHERE [dbo].[Person].[Name] = N'John''s'
Как вы атакуете, что если я принимать только string
в IsEqualTo
метод и уйти от одного '
с ''
?
Насколько я знаю, SQL Server принимает только '
для разделителя строк.
Почему наилучший подход «не вариант»? –
Чтобы ответить на этот вопрос и помочь вам решить вашу проблему, нам нужно знать, почему вы не можете использовать параметризованные запросы, чтобы мы могли быть уверены, что помогаем вам исправить вашу проблему, не вызывая больше. –
Это потому, что у нас есть требование хранить/регистрировать запрос «как есть», и нам не разрешено использовать какие-либо «неясные» вещи, которые скроют фактическое значение параметров вместо varbinary/image/и очень «большого» «те, которые занимают слишком много места для регистрации. –