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

В разделе описаны меры безопасности, применяемые при выполнении серверной логики, обработке пользовательского ввода и работе HTTP-интерфейсов системы.

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

В системе реализованы ограничения, направленные на безопасное выполнение серверной логики, включая выполнение выражений и сценариев.

  • ограничен доступ к 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