如何限定防火墙使其只允许通过指定请求
使用Security组件时,你可以创建“匹配了特定请求选项”的防火墙。多数情况下,仅匹配URL就可够了,但在特殊情况下,你需要“针对请求的其他选项”来进一步限制防火墙的初始化。
你可以单独使用任何一个限制条件,或者将其混用,来得到你想要的防火墙配置。
通过Pattern(正则条件)限制 ¶
这是默认的制约和限制方式,如果请求URL和配置的pattern
相匹配,那么防火墙被初始化。
|
# app/config/security.yml
# ...
security:
firewalls:
secured_area:
pattern: ^/admin
# ... |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- app/config/security.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<srv:container xmlns="Http://symfony.com/schema/dic/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<config>
<!-- ... -->
<firewall name="secured_area" pattern="^/admin">
<!-- ... -->
</firewall>
</config>
</srv:container> |
|
// app/config/security.php
// ...
$container->loadFromExtension('security', array(
'firewalls' => array(
'secured_area' => array(
'pattern' => '^/admin',
// ...
),
),
)); |
pattern
是一个正则表达式。本例中,如果URL以 /admin
为开始(因为 ^
正则字符),防火墙将被激活。如果URL不匹配此pattern,防火墙就不会被激活,在它后面的防火墙将有机会来匹配这一请求。
通过主机名限制 ¶
如果仅匹配 pattern
还不够的话,请求也可以针对 host
进行匹配。当配置选项中的 host
被设置,防火墙将为限制为仅在“请求中的主机名与配置信息相匹配”时才初始化。
|
# app/config/security.yml
# ...
security:
firewalls:
secured_area:
host: ^admin\.example\.com$
# ... |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- app/config/security.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<srv:container xmlns="http://symfony.com/schema/dic/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<config>
<!-- ... -->
<firewall name="secured_area" host="^admin\.example\.com$">
<!-- ... -->
</firewall>
</config>
</srv:container> |
|
// app/config/security.php
// ...
$container->loadFromExtension('security', array(
'firewalls' => array(
'secured_area' => array(
'host' => '^admin\.example\.com$',
// ...
),
),
)); |
host
(类似于pattern
)是正则表达式。本例中,如果主机名完全符合 admin.example.com
(因 ^
和$
正则字符),防火墙将被激活。如果主机名不匹配此条件,防火墙不会被激活,后面的防火墙将有机会来匹配这一请求。
通过HTTP Method限制 ¶
配置信息中的 methods
选项,根据所提供HTTP方法来,来限制防火墙的初始化。
|
# app/config/security.yml
# ...
security:
firewalls:
secured_area:
methods: [GET, POST]
# ... |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!-- app/config/security.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<srv:container xmlns="http://symfony.com/schema/dic/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:srv="http://symfony.com/schema/dic/services"
xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<config>
<!-- ... -->
<firewall name="secured_area" methods="GET,POST">
<!-- ... -->
</firewall>
</config>
</srv:container> |
|
// app/config/security.php
// ...
$container->loadFromExtension('security', array(
'firewalls' => array(
'secured_area' => array(
'methods' => array('GET', 'POST'),
// ...
),
),
)); |
本例中,仅当请求中的HTTP方法是 GET
或 POST
,防火墙才被激活。如果请求的方法不在允许方法的数组中,则防火墙不会被激活,后面的防火墙将有机会来匹配这一请求。