跳到内容

如何将防火墙限制于请求

编辑此页

当使用 Security 组件时,防火墙将根据请求匹配器的结果来决定是否处理请求:第一个匹配请求的防火墙将处理它。

最后一个防火墙可以配置为不使用任何匹配器,以处理每个传入的请求。

通过配置限制

大多数时候你不需要自己创建匹配器,因为 Symfony 可以根据防火墙配置为你完成。

注意

你可以单独使用以下任何限制,或将它们混合在一起以获得你想要的防火墙配置。

通过路径限制

这是默认的限制,它限制防火墙仅在请求路径与配置的 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:
            methods: [GET, POST]
            # ...

在这个例子中,防火墙只有在请求的 HTTP 方法是 GETPOST 时才会被激活。如果该方法不在允许的方法数组中,则防火墙将不会被激活,后续的防火墙将再次有机会为该请求进行匹配。

通过服务限制

如果以上选项不符合你的需求,你可以将任何实现了 RequestMatcherInterface 的服务配置为 request_matcher

1
2
3
4
5
6
7
8
# config/packages/security.yaml

# ...
security:
    firewalls:
        secured_area:
            request_matcher: App\Security\CustomRequestMatcher
            # ...
这项工作,包括代码示例,根据 Creative Commons BY-SA 3.0 许可协议获得许可。
目录
    版本