---
title: "GreenSQL: Защита SQL-серверов от инъекций"
description: "Иногда возникает необходимость использовать клиент-серверное программное обеспечение, реализующее н..."
author: "root-kz"
published: "2011-04-17T23:21:26+00:00"
modified: "2011-04-17T23:30:25+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/greensql-zashchita-sql-serverov-ot-inekciy-132688"
markdown_url: "https://yvision.kz/post/greensql-zashchita-sql-serverov-ot-inekciy-132688/markdown"
site_name: "Yvision.kz"
---

# GreenSQL: Защита SQL-серверов от инъекций

> Иногда возникает необходимость использовать клиент-серверное программное обеспечение, реализующее н...

![GreenSQL: Защита SQL-серверов от инъекций](http://storage.yvision.kz/images/user/root-kz/L0UbvXfr4b7tVjr5am35IAIXWF7Z3E.jpg)

Иногда возникает необходимость использовать клиент-серверное программное обеспечение, реализующее нужный функционал, но крайне уязвимое к SQL-инъекциям. В основном это веб-сайты, сетевые приложения и другие сервисы, доступ к которым открыт широкому кругу пользователей, в том числе и злоумышленникам. В силу различных причин не всегда есть возможность предотвратить SQL-инъекции на уровне приложения — исходный код может быть закрыт, либо, в случае открытого кода, недостаточно знаний для внесения в него изменений, либо эта операция является дорогостоящей.

Обеспечить безопасность приложения в данном случае поможет GreenSQL — файрволл или прокси для SQL-серверов. Сервис GreenSQL размещается между вашим приложением и SQL-сервером, принимает sql-запросы от приложения и в зависимости от степени его благонадежности либо перенаправляет их на целевой SQL-сервер, либо отвергает.

![GreenSQL: Защита SQL-серверов от инъекций](http://www.greensql.net/files/images/greensql-architecture.preview.jpg)

GreenSQL поддерживает СУБД Microsoft SQL 2000/2005/2008, MySQL 4.x/5.x, PostgreSQL 7.x/8.x и является кросс-платформенным. Среди официально поддерживаемых платформ Microsoft Windows Server 2003/2008, Ubuntu, CentOS. Поддерживаются 32-х и 64-х разрядные системы.

Что касается стоимости, существует несколько модификаций программы — бесплатная Express, Lite и Pro с ежемесячной оплатой. Основное отличие платных версий от бесплатной, если опустить техподдержку и автоматическое обновление, — возможность модифицировать запросы на лету и работа с безопасными SSL-соединениями.

Каждая из версий GreenSQL поддерживает несколько режимов работы.

**Risk Based — IPS/IDS** реализует базовый алгоритм идентификации потенциально опасных SQL-запросов. Т.е. GreenSQL производит семантический разбор запроса и по косвенным признакам определяет степень его благонадежности. Калькуляция степени опасности производится с учетом следующих параметров:
- операции, изменяющие структуру таблиц

- запросы к служебным таблицам и базам

- запросы с использованием доступа к файловой системе

- административные запросы, например, SHOW TABLES, SHOW CREATE TABLE

- операции сравнения, всегда возвращающие ИСТИНУ, например, 1=1, field=field

- комментарии внутри запроса

- использование OR в запросе

- операции над таблицами, содержащими личную информацию, например, users, accounts, payments

- передача в запросе пустого пароля, например, password='', pwd='', passw=''

Необходимые заблокированные запросы можно добавить в список разрешенных (whitelist).

**Database Firewall** — активный режим защиты, который пропускает только запросы, находящиеся в списке разрешенных (whitelist).

**Learning Mode** — режим обучения, в ходе которого все запросы (вернее, шаблоны запросов) попадают в список разрешенных (whitelist). Таким образом, можно в режиме обучения прогнать в хвост и гриву свое приложение, чтобы он собрал базу «чистых» запросов, а затем включить «боевой» режим с блокировкой всех неизвестных запросов (Database Firewall + Active protection).

## Настройки программы

GreenSQL запускается как сервис (демон). Управление настройками происходит через веб-интерфейс, расположенный по адресу [127.0.0.1](https://127.0.0.1/):5000.

![GreenSQL: Защита SQL-серверов от инъекций](http://phorm.ru/habrahabr/GreenSQL/login.png)

Логин/пароль по умолчанию admin/pwd

После авторизации вы попадаете на страницу статистики работы приложения. Перейдите в раздел System > License, и укажите лицензионный ключ, который вы найдете в письме со ссылкой для скачивания (для возможности скачивания необходима регистрация на [сайте разработчика](http://greensql.com/)).

![GreenSQL: Защита SQL-серверов от инъекций](http://phorm.ru/habrahabr/GreenSQL/license.png)

Для начала работы необходимо создать прокси. В бесплатной версии можно создать только один прокси. Для создания перейдите в раздел Databases > Create proxy.

![GreenSQL: Защита SQL-серверов от инъекций](http://phorm.ru/habrahabr/GreenSQL/create_proxy.png)

- **Proxy name** — название прокси для идентификации внутри GreenSQL

- **Database type** — тип защищаемой СУБД

- **Username и Password** — логин и пароль для авторизации в СУБД. Не является обязательным, но их указание помогает при дальнейшей настройке выбирать объекты БД из списка, а не вводить вручную

- **Frontend IP** — на каком IP будет работать прокси (актуально в случае нескольких сетевых подключений на машине). 0.0.0.0 означает работу на всех сетевых интерфейсах

- **Frontend Port** — на каком порту будет работать прокси. Именно этот порт необходимо использовать в своем приложении для подключения к СУБД

- **Backend server name** — название защищаемой СУБД. Может быть любым, необходим для идентификации внутри GreenSQL (я пишу localhost)

- **Backend IP** — IP-адрес, на котором работает защищаемая СУБД (например, 127.0.0.1)

- **Backend port** — порт, на котором работает защищаемая СУБД (обычно, для MySQL — 3306, для MSSQL — 1433, для PostgreSQL — 5432)

После создания прокси он будет запущен на указанном порту. Теперь достаточно задать правила для работы прокси (Policy), чтобы начать использовать GreenSQL в своем приложении. В принципе, уже на этом этапе можно попробовать настроить свое приложение на работу с GreenSQL, правда, работать оно будет в «прозрачном» режиме.

![GreenSQL: Защита SQL-серверов от инъекций](http://phorm.ru/habrahabr/GreenSQL/policy.png)

- **Rule type** — Тип правила (Learning mode, Database firewall, Risk based). В зависимости от того, какой тип выбран, изжменяются поля для заполнения.

- **Database** — название защищаемой базы данных в СУБД

- **Proxy** — прокси, на который распространяется правило

- **IPS/IDS (Mode)** — является общим для всех типов правил. **No IPS/IDS** — не использовать автоматическое распознавание атак

- **Active protection** — блокировать потенциально опасные запросы

- **Monitoring** — логировать и не блокировать потенциально опасные запросы

Теперь можно попробовать настроить свое приложение на использование GreenSQL.

# Производительность

Тест производительности взят с официального [сайта GreenSQL](http://www.greensql.net/publications/greensql-performance-test). Суть теста такова, что посредством Apache Bench производилось несколько замеров в 400 обращений и 10 конкурентными запросами. Результат тестов представлен на изображении.

![GreenSQL: Защита SQL-серверов от инъекций](http://www.greensql.net/files/images/greensql-0.9.4.beta.performance.test.preview.jpg)

GreenSQL поставляется с хорошей документацией по использованию. Здесь я не пытался ее перевести, а скорее, обозначил общее назначение и настройки базового функционала программы. Предыдущие версии GreenSQL (до 1.2, текущая — 1.5) распространялись под лицензией GPL.

---

Source: [https://yvision.kz/post/greensql-zashchita-sql-serverov-ot-inekciy-132688](https://yvision.kz/post/greensql-zashchita-sql-serverov-ot-inekciy-132688)