Каким образом санитария, выходящая за пределы одинарных кавычек, может быть побеждена путем внедрения SQL в SQL Server?

Для начала, я хорошо знаю, что параметризованные запросы - лучший вариант, но я спрашиваю, что делает уязвимость представленной ниже стратегии. Люди настаивают на том, что приведенное ниже решение нене работает, поэтому я ищу пример того, почему это не будетт.

Если динамический SQL встроен в код с использованием следующего экранирования перед отправкой на SQL Server, какой тип внедрения может победить это?

string userInput= "N'" + userInput.Replace("'", "''") + "'"

На аналогичный вопрос ответилиВотно я неЯ не верю, что любой из ответов применим здесь.

Избегая одиночной кавычки с "\" ISN»это возможно в SQL Server.

я верюSQL-контрабанда с Юникодом (обрисовано в общих чертахВот) будет сорван тем фактом, что создаваемая строка помечается как Unicode буквой N, предшествующей одинарной кавычке. Насколько я знаю, нет других наборов символов, которые SQL Server автоматически переводил бы в одну кавычку. Без единой кавычки без спасения я неЯ считаю, что инъекция возможна.

Я нене верюУсечение строки является жизнеспособным вектором либо. SQL Server определенно победилделать усечение, так как максимальный размер дляnvarchar 2 ГБв соответствии с Microsoft, Строка размером 2 ГБ невозможна в большинстве ситуаций и невозможна в моей.

Инъекция второго порядка возможно, но возможно ли это:

Все данные, поступающие в базу данных, очищаются с помощью вышеуказанного методаЗначения из базы данных никогда не добавляются в динамический SQL (зачем вам вообще когда-либо делать это, когда вы можете просто ссылаться на табличное значение в статической части любой строки динамического SQL?). I '

Я не предполагаю, что это лучше или альтернативно использованию параметризованных запросов, но я хочу знать, насколько уязвимо то, что я изложил. Есть идеи?

Ответы на вопрос(6)

Ваш ответ на вопрос