Как ограничить брандмауэры по конкретному запросу
Дата обновления перевода 2023-09-26
Как ограничить брандмауэры по конкретному запросу
При использовании компонента Security, брандмауэры будут определять, будут ли они обрабатывать запрос, основываясь на результате сопоставителя запросов: первый брандмауэр, совпадающий с запросом, обработает его.
Последний брандмауэрр может быть сконфигурирован без сопоставителя, чтобы обрабатывать каждый входящий запрос.
Ограничене по конфигурации
В большинстве случаев вам не понадобится создавать сопоставители самостоятельно, так как Symfony может это сделать за вас, основываясь на вашей конфигурации брандмауэра.
Note
Вы можете использовать любое из следующих ограничений индивидуально или совмещать их, чтобы получить желаемую конфигурацию брандмауэра.
Ограничение по пути
Это ограничение по умолчанию, и оно ограничивает брандмауэр, чтобы он был инициализирован
только если путь запроса совпадает со сконфигурированным pattern
.
1 2 3 4 5 6 7 8
# config/packages/security.yaml
# ...
security:
firewalls:
secured_area:
pattern: ^/admin
# ...
pattern
- это регулярное выражение. В этом примере, брандмауэр будет активирован
только ели путь начинается (из-за символа регулярного выражения ^
) с /admin
.
Если путь не совпадает с этим паттерном, брандмауэр не будет активирован, а последующие
брандмауэры будут иметь возможность быть сопоставленными с этим запросом.
Ограничение по хосту
Если сопоставления только по pattern
недостаточно, то запрос можно также сопоставить с
host
. Когда установлена опция конфигурации host
, брандмауэр будет ограничен так, чтобы
запускаться только если хост запроса совпадает с конфигурацией.
1 2 3 4 5 6 7 8
# config/packages/security.yaml
# ...
security:
firewalls:
secured_area:
host: ^admin\.example\.com$
# ...
host
(как и pattern
) - это регулярное выражение. В этом примере, брандмауэр
будет активирован только если хост полностью приравнивается к имени хоста admin.example.com
(из-за символов регулярного выражения ^
и $
). Если имя хоста не совпадает с
этим шаблоном, брандмауэр не будет активирован, и последующие брандмауэры
будут иметь возможность быть сопоставлеными с этим запросом.
Ограничение по HTTP-методам
Опция конфигурации methods
ограничивает инициализацию брандмауэра по предоставленным
HTTP-методам.
1 2 3 4 5 6 7 8
# config/packages/security.yaml
# ...
security:
firewalls:
secured_area:
host: ^admin\.example\.com$
# ...
В этом примере, брандмауэр будет активирован только если HTTP-метод запроса -
GET
или POST
. Если этого метода нет в массиве разрешённх методов, то
брандмауэр не будет активирован, и последующие брандмауэры будут иметь возможность
быть сопоставлеными с этим запросом.
Ограничение по сервису
Если опции выше не подходят под ваши потребности, вы можете сконфигурировать любой сервис,
реализующий RequestMatcherInterface как request_matcher
.
1 2 3 4 5 6 7 8
# config/packages/security.yaml
# ...
security:
firewalls:
secured_area:
request_matcher: App\Security\CustomRequestMatcher
# ...