Как ограничить брандмауэры по конкретному запросу

Дата обновления перевода 2023-01-11

Как ограничить брандмауэры по конкретному запросу

При использовании компонента Security, брандмауэры будут определять, будут ли они обрабатывать запрос, основываясь на результате сопоставителя запросов: первый брандмауэр, совпадающий с запросом, обработает его.

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

Ограничене по конфигурации

В большинстве случаев вам не понадобится создавать сопоставители самостоятельно, так как Symfony может это сделать за вас, основываясь на вашей конфигурации брандмауэра.

Note

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

Ограничение по пути

Это ограничение по умолчанию, и оно ограничивает брандмауэр, чтобы он был инициализирован только если путь запроса совпадает со сконфигурированным pattern.

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
# config/packages/security.yaml

# ...
security:
    firewalls:
        secured_area:
            pattern: ^/admin
            # ...

pattern - это регулярное выражение. В этом примере, брандмауэр будет активирован только ели путь начинается (из-за символа регулярного выражения ^) с /admin. Если путь не совпадает с этим паттерном, брандмауэр не будет активирован, а последующие брандмауэры будут иметь возможность быть сопоставленными с этим запросом.

Ограничение по хосту

Если сопоставления только по pattern недостаточно, то запрос можно также сопоставить с host. Когда установлена опция конфигурации host, брандмауэр будет ограничен так, чтобы запускаться только если хост запроса совпадает с конфигурацией.

  • YAML
  • XML
  • PHP
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-методам.

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
# config/packages/security.yaml

# ...
security:
    firewalls:
        secured_area:
            methods: [GET, POST]
            # ...

В этом примере, брандмауэр будет активирован только если HTTP-метод запроса - GET или POST. Если этого метода нет в массиве разрешённх методов, то брандмауэр не будет активирован, и последующие брандмауэры будут иметь возможность быть сопоставлеными с этим запросом.

Ограничение по сервису

Если опции выше не подходят под ваши потребности, вы можете сконфигурировать любой сервис, реализующий RequestMatcherInterface как request_matcher.

  • YAML
  • XML
  • PHP
1
2
3
4
5
6
7
8
# config/packages/security.yaml

# ...
security:
    firewalls:
        secured_area:
            request_matcher: App\Security\CustomRequestMatcher
            # ...