Перейти к основному содержанию
`Ctrl`+`K`

# Безопасность выполнения и обработки запросов

## Безопасность выполнения серверной логики

Архитектура системы предусматривает ограничения, направленные на безопасное выполнение серверной логики, выполнение выражений и сценариев, а также предотвращение несанкционированных операций.

- ограничен доступ к SOAP-сервису, используемому для работы с шаблонами;

- шедуллер запускается под разными пользователями; настройка разграничения пользователей для шедуллера не применяется;

- вызов JEXL-выражений через SSH-консоль выполняется с использованием безопасного диалекта;

- реализовано разграничение прав на выполнение JEXL-скриптов через веб-сокеты.

## Защита от изменения логики SQL-запросов

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

Реализованные меры | Описание реализации
--- | ---
Экранирование пользовательского ввода | Реализована функция `sqlEscape` для экранирования пользовательских данных. Использование функции обязательно при формировании SQL-запросов путём конкатенации строк и закреплено организационно в требованиях к разработке.
Безопасное построение динамических SQL-запросов | Реализован компонент `SqlBuilder` для формирования динамических SQL-запросов. Компонент автоматически выполняет экранирование пользовательских данных, если явно не указано иное.
Ограничение доступа к SQL-логике через JEXL | Реализован доступ к пакетам базы данных через JEXL с возможностью ограничения доступа ко всему пакету или к отдельным методам. Пакеты не отображаются в списке объектов администратора.
Разграничение доступа в REST-пакетах | Реализована возможность разграничения доступа в REST-пакетах на уровне URL входящих запросов.

Указанные меры применяются во всех компонентах системы, где пользовательские данные участвуют в формировании SQL-запросов, включая REST-интерфейсы и серверную логику.

Пример обработки запроса

    GET /GLOBAL-QAS/gtk-ru.bitec.app.btk.utils.Btk_UrlObjectFinder%23UrlFinder/?ex;sTableName_dz=btk_user;SELECT+version()::int%3d1;+--+-&ex;susername=UIB_SCAN2 HTTP/1.1
    Host: global-qas.sgc.oil.gas
    Cookie: access_token=<JWT>

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

    HTTP/1.1 400 Bad Request
    Content-Type: application/json; charset=UTF-8

    {
      "error": "Invalid request parameters"
    }

Информация о версии базы данных и иных характеристиках СУБД в ответе отсутствует.

## Сокрытие информации о веб-сервере

В целях снижения риска раскрытия технической информации HTTP-интерфейсы системы не передают сведения о типе и версии используемого веб-сервера.

Во всех HTTP-ответах исключена передача стандартных и расширенных заголовков, содержащих информацию о серверном программном обеспечении, включая `Server`, `X-Powered-By`, а также аналогичные заголовки сторонних компонентов и middleware.

Поведение единообразно для всех HTTP-эндпоинтов системы, включая REST-интерфейсы.

Пример

    HTTP/1.1 303 See Other
    location: https://global-qas.oil.gas/login/login.html?return-uri-Lw==
    content-length: 0