[] скобки в sql server для внедрения

#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