Статья опубликована в рамках: Научного журнала «Студенческий» № 19(357)
Рубрика журнала: Информационные технологии
МЕХАНИЗМЫ ПАРАМЕТРИЗОВАННОГО ВЫПОЛНЕНИЯ SQL-ЗАПРОСОВ КАК ЭШЕЛОН ЗАЩИТЫ ОТ SQL-ИНЪЕКЦИЙ: СРАВНИТЕЛЬНЫЙ АНАЛИЗ POSTGRESQL И MICROSOFT SQL SERVER НА ОСНОВЕ ПЛАНОВ ВЫПОЛНЕНИЯ
PARAMETERIZED SQL QUERY EXECUTION MECHANISMS AS AN ECHELON OF PROTECTION AGAINST SQL INJECTIONS: A COMPARATIVE ANALYSIS OF POSTGRESQL AND MICROSOFT SQL SERVER BASED ON EXECUTION PLANS
Tugolukov Maxim Sergeevich
Student, Institute of Economics and Finance, Russian University of Transport,
Russia, Moscow
Yakovlev Mikhail Valerievich
Student, Institute of Economics and Finance, Russian University of Transport, Russia, Moscow
Grinchar Nikolay Nikolaevich
Scientific Supervisor, Candidate of Economics, Associate Professor, Institute of Economics and Finance, Russian University of Transport
Russia, Moscow
АННОТАЦИЯ
Сравнительный анализ механизмов параметризованного выполнения SQL-запросов в PostgreSQL 16 и Microsoft SQL Server 2022 в контексте противодействия SQL-инъекциям. Исследование особенностей компиляции SQL-выражений и планов выполнения запросов на стадиях Parse, Bind и Optimize. Анализ различий между протокольным разделением кода и данных в PostgreSQL и механизмом автоматической параметризации литералов в Microsoft SQL Server. Оценка ограничений параметризации при атаках, изменяющих структуру синтаксического дерева запроса (AST), а также возможностей использования кэша планов выполнения для аудита безопасности приложений.
ABSTRACT
Comparative analysis of parameterized SQL query execution mechanisms in PostgreSQL 16 and Microsoft SQL Server 2022 in the context of countering SQL injections. Investigation of the features of compilation of SQL expressions and query execution plans at the Parse, Bind and Optimize stages. Analysis of the differences between the protocol separation of code and data in PostgreSQL and the mechanism of automatic parameterization of literals in Microsoft SQL Server. Evaluation of parameterization limitations in attacks that alter the structure of the query syntax tree (AST), as well as the possibilities of using the execution plan cache to audit application security.
Ключевые слова: SQL-инъекция, параметризация запросов, PostgreSQL, Microsoft SQL Server, план выполнения запроса, информационная безопасность.
Keywords: SQL injection, query parameterization, PostgreSQL, Microsoft SQL Server, query execution plan, information security.
1. Введение
SQL-инъекции остаются одним из наиболее распространенных классов уязвимостей веб-приложений и входят в перечень критических рисков проекта OWASP Top 10. Основной причиной их возникновения является нарушение разделения программного кода и пользовательских данных при формировании SQL-запросов.
Современные СУБД выполняют синтаксический анализ и оптимизацию SQL-запросов, что позволяет использовать параметризацию как дополнительный механизм защиты. При этом параметризация применима только к литеральным значениям и не распространяется на структурные элементы SQL-грамматики, формирующие синтаксическое дерево запроса (AST).
Целью исследования является сравнительный анализ механизмов параметризованного выполнения запросов в PostgreSQL и Microsoft SQL Server, а также оценка их эффективности в контексте противодействия SQL-инъекциям.
2. Материалы и методы
Исследование проводилось на стенде, включающем PostgreSQL 16 под управлением Debian 12 и Microsoft SQL Server 2022 Developer Edition под управлением Windows Server 2022.
В качестве инструментов анализа использовались:
• EXPLAIN (ANALYZE, VERBOSE, BUFFERS) и расширение pg_stat_statements для PostgreSQL;
• XML-представления SHOWPLAN и представление sys.dm_exec_query_stats для Microsoft SQL Server.
Методика эксперимента предусматривала моделирование:
• тавтологических SQL-инъекций;
• UNION-инъекций;
• инъекций в ORDER BY;
• динамически формируемых идентификаторов.
Анализ выполнялся путем сопоставления AST запросов, операторов Filter/Scan и параметрических узлов Param и ParameterList.
3. Результаты и обсуждение
3.1. PostgreSQL
В PostgreSQL отсутствует механизм автоматической параметризации ad-hoc SQL-запросов, аналогичный Forced Parameterization в Microsoft SQL Server. Защита достигается за счет Extended Query Protocol, реализующего разделение стадий Parse, Bind и Execute.
PREPARE q(text) AS
SELECT *
FROM users
WHERE name = $1;
Листинг 1. Подготовленный запрос в PostgreSQL
На стадии Parse PostgreSQL формирует AST запроса с параметрическими узлами Param, а фактические значения передаются позднее на стадии Bind.
EXECUTE q(' OR 1=1 --');
Листинг 2. Передача вредоносной нагрузки как параметра
В результате вредоносная строка интерпретируется как литерал и не изменяет структуру предиката.
Безопасность в PostgreSQL обеспечивается не автоматической трансформацией SQL-текста, а разделением кода и данных на уровне протокола взаимодействия клиента и сервера. При использовании простого протокола запросов, ручной конкатенации строк или dynamic SQL защита отсутствует, поскольку сервер получает уже сформированное SQL-выражение.
3.2. Microsoft SQL Server
Microsoft SQL Server поддерживает механизм автоматической параметризации запросов, реализуемый на уровне оптимизатора.
ALTER DATABASE testdb
SET PARAMETERIZATION FORCED;
Листинг 3. Активация Forced Parameterization
В режиме Forced Parameterization SQL Server заменяет литеральные константы параметрами на стадии оптимизации запроса.
<ParameterList>
<ColumnReference Column="@P0"
ParameterDataType="nvarchar(4000)" />
</ParameterList>
Листинг 4. Фрагмент XML-плана SQL Server
Однако параметризация выполняется после синтаксического анализа, поэтому SQL-инъекции, изменяющие AST запроса, не предотвращаются.
SELECT *
FROM users
WHERE name = 'John' OR 1=1 --';
Листинг 5. Уязвимый динамический SQL
В данном случае оператор OR становится частью AST до стадии параметризации, вследствие чего логика запроса уже модифицирована.
Эксперимент также показал, что автоматическая параметризация не применяется к структурным элементам SQL, включая идентификаторы объектов, ORDER BY и DDL-конструкции.
3.3. Кэш планов выполнения как объект аудита
Кэш планов выполнения может использоваться как инструмент аудита безопасности. Анализ pg_stat_statements и sys.dm_exec_query_stats позволяет выявлять запросы, не использующие параметризацию и формируемые динамически.
Большое количество схожих запросов, различающихся только литеральными значениями, может указывать на отсутствие безопасного разделения кода и данных.
3.4. Сравнительная характеристика механизмов
Таблица 1.
Сравнение механизмов параметризованного выполнения запросов
|
Характеристика |
PostgreSQL 16 |
MSSQL 2022 |
|
Основной механизм |
Extended Query Protocol |
Forced Parameterization |
|
Уровень реализации |
Протокольный |
Оптимизатор |
|
Auto-parameterization |
Отсутствует |
Частично поддерживается |
|
Разделение кода и данных |
Явное |
Ограниченное |
|
Защита литеральных значений |
Высокая |
Ограниченная |
|
Защита structural context |
Отсутствует |
Отсутствует |
|
Средства анализа |
pg_stat_statements |
sys.dm_exec_query_stats |
4. Заключение
PostgreSQL и Microsoft SQL Server используют различные механизмы параметризованного выполнения запросов: протокольное разделение кода и данных и автоматическую шаблонизацию литералов соответственно.
Установлено, что параметризация эффективно ограничивает SQL-инъекции в контексте литеральных значений, но не предотвращает атаки, изменяющие структуру SQL-запроса. Наиболее уязвимыми остаются сценарии динамического формирования структурных элементов SQL-грамматики.
Анализ планов выполнения и кэша запросов может использоваться как дополнительный инструмент аудита безопасности прикладных систем.
Список литературы:
- OWASP Top 10 Project. – URL: https://owasp.org/Top10/ (дата обращения: 21.05.2026).
- Microsoft Learn — Query Processing Architecture Guide. – URL: https://learn.microsoft.com/en-us/sql/relational-databases/query-processing-architecture-guide (дата обращения: 21.05.2026).
- PostgreSQL Documentation — Frontend/Backend Protocol Flow. – URL: https://www.postgresql.org/docs/current/protocol-flow.html (дата обращения: 21.05.2026).
- Введение в системы баз данных / К. Дж. Дейт. – 8-е изд. – Москва : Вильямс, 2023. – 1328 с.
- Леденев С. С. Методы противодействия SQL-инъекциям на уровне СУБД // Вопросы кибербезопасности. – 2023. – № 4(52). – С. 45–52.

