#sql #sql-server
Вопрос:
Мы используем скобки [ ] в качестве разделителей в нашем SQL-запросе. Это позволяет нам использовать специальные символы или зарезервированные слова для создания имени базы данных и т.д.
Я пытаюсь проверить, могу ли я ввести что-то вредоносное в приведенный ниже запрос, который представляет собой простое создание БД, но с [ ]
create database [x; Drop database "gt;gt;"] ;
Но кажется, что все, что находится внутри разделителя, является символом. Означает ли это, что у нас не может быть SQL-инъекции, если мы используем разделители?
шаблон:
create database [" userProvidedString "]
Комментарии:
1. Главный трюк при внедрении SQL-это завершение разделителя открытия. т. е. как вы думаете, что происходит, когда вы вставляете это?
dummydb] GO DROP DATABASE [goodbye] SELECT 1 as [test
2. Правильный способ очистки
userProvidedString
имен объектов for заключается в использованииQUOTENAME
функции3. Я бы рекомендовал вам параметризовать это утверждение
DECLARE @sql NVARCHAR(200) = 'CREATE DATABASE ' QUOTENAME(?); EXEC sp_executesql @sql