Фильтр WebSocket#
Фильтр web_socket предназначен для обмена сообщениями между браузером и веб-сервером в режиме реального времени. Фильтр web_socket представляет собой последовательность параметров.
filter_web_socket - параметры#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Опциональный |
HTTP-фильтры для обработки websocket фреймов. Получая на вход фрагменты websocket frame, собирают их, проделывают необходимые преобразования над исходными данными, формируют http-запрос и отправляют его некоторому внешнему http-обработчику. Все существующие http-фильтры имеют общего предка — класс org.sbrf.sbtwaf.SimpleAsynHttpFilter. Последовательность http может содержать в себе несколько фильтров, которые работают независимо и параллельно друг другу |
Параметры, описанные в разделе «filter_web_socket - http» |
— |
|
Опциональный |
nohttp-фильтры не используют http протокол для выполнения фильтрации. Все операции, касающиеся фильтрации, они выполняют внутри себя, а для взаимодействия с другими сервисами используют протоколы, отличные от http. Наследуются напрямую от абстрактного класса Filter. Последовательность может содержать в себе несколько фильтров, которые работают независимо и параллельно друг другу. Если какой-либо фильтр имеет в параметре rule значение denied, а другой фильтр allowed* на одинаковых типах фреймов, то результатом будет DENIED |
Параметры, описанные в разделе «filter_web_socket - nohttp» |
— |
filter_web_socket - http#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный |
Тип используемого фильтра |
|
— |
|
Обязательный |
Тип действия, в случае если фильтр детектировал нарушение политики |
|
— |
|
Обязательный |
Этап, на котором будет действовать action |
|
— |
|
Обязательный |
Тип содержимого для http-запроса, отправляемому на фильтр |
Строковое значение |
— |
|
Опциональный |
Какие правила необходимо подключить для использования в фильтре: фильтр modsecurity, валидация тела запроса/ответа (json-валидация, wsdl/xsd-валидация) |
Параметры, описанные в разделах Фильтр ModSecurity, Валидация по JSON схеме, Валидация по WSDL/XSD схеме |
— |
|
Опциональный |
Максимальное время ожидания соединения с http-фильтром. Если значение не установлено или равно нулю — таймаут считается не заданным |
Текстовое значение с суффиксом: |
— |
|
Опциональный |
Максимальное время ожидания порции данных от http-фильтра. Если значение не установлено или равно нулю — таймаут считается не заданным |
Текстовое значение с суффиксом: |
— |
|
Опциональный |
Максимальное время ожидания следующей порции данных для отправки http-фильтру. Если значение не установлено или равно нулю — таймаут считается не заданным |
Текстовое значение с суффиксом: |
— |
filter_web_socket - nohttp#
Название |
Обязательность |
Описание |
Возможные значения |
Значение по умолчанию |
|---|---|---|---|---|
|
Обязательный |
Тип используемого фильтра |
|
— |
|
Обязательный |
Тип действия, в случае если фильтр детектировал нарушение политики |
|
— |
|
Обязательный |
Этап, на котором будет действовать action |
|
— |
|
Обязательный (если |
Типы фреймов, на которые распространяется задаваемое ограничение. Так как фактически определена иерархия типов фреймов — DATA (TEXT и BINARY) и CONTROL (PING, PONG, CLOSE) — то это необходимо учитывать |
Последовательность: |
— |
|
Обязательный (если |
Разрешены или запрещены перечисленные типы |
|
— |
|
Обязательный (если |
Предельный размер данных сообщения. Если предел превышен, произойдет отключение сеанса |
Текстовое значение с суффиксом: число без суффикса (байты), |
— |
|
Обязательный (если |
Необходимо ли декомпрессировать сообщение перед отправкой на проверку по лимиту передаваемых данных |
|
— |
Пример использования фильтра DataSizeLimitFilter:
service:
service_web_socket_proxy:
- id: 1
optional:
# ограничение на сессию
upload_size_limit: 2k
download_size_limit: 2k
size_limit_decompression: true
filters:
filter_web_socket:
nohttp:
# ограничение на одно сообщение
- type: DataSizeLimitFilter
action: block
stage: REQ
limit: 1k
decompression: true
Пример тестового конфигурационного файла:
profile: ws_test
system:
wrk_count: 1
conn_count: 4000
optional:
log_level: debug
service:
service_main_proxy:
- id: 1
listen:
- port: 8091
hostname:
- localhost
url: /
upstream_groups:
- id: ups1
servers:
- server: localhost:8019
service_web_socket_proxy:
- id: ws1
url: ^\/ws-stub.*$
upstream_group_id: ups1
use_main_upstream_groups: true
optional:
upload_size_limit: 2k
download_size_limit: 2k
size_limit_decompression: true
filters:
filter_web_socket:
http:
- type: WsAsynHttpFilter
action: disconnect
stage: REQ
apply:
filter_mds:
rules:
- base
- owasp-crs
- comodo
content_type: application/x-www-form-urlencoded
connect_timeout: 10
read_timeout: 5
write_timeout: 5
nohttp:
- type: WsFrameTypeFilter
action: block
stage: REQ
frame_types:
- BINARY
rule: DENIED
- type: DataSizeLimitFilter
action: block
stage: REQ
limit: 1k
decompression: true
Пример использования фильтра WsFrameTypeFilter:
service:
service_web_socket_proxy:
- id: 1
filters:
filter_web_socket:
http:
- type: WsAsynHttpFilter
action: disconnect
stage: REQ
apply:
filter_mds:
rules:
- base
- owasp-crs
- comodo
content_type: application/x-www-form-urlencoded
connect_timeout: 10s
read_timeout: 5s
write_timeout: 5s
nohttp:
- type: WsFrameTypeFilter
action: disconnect
stage: RESP
frame_types:
- DATA
- CLOSE
rule: ALLOWED