Symfony访问控制允许在路径名称中使用反斜杠

时间:2019-04-30 06:18:58

标签: php symfony

我正在使用symfony 3.4。我的security.yml文件中有一条路由,更具体地说,在access_control键中有一条路由。路线如下所示:

- { path: '^/route/subroute/SOME_TOKEN', roles: [ SOME_ROLE ] }

SOME_TOKEN是一个urlencoded字符串,除了未知数量的其他字符外,它可能包含也可能不包含正斜杠。

从文档所说的here来看,我的路线应如下所示:

- { path: '^/route/subroute/.+', roles: [ SOME_ROLE ] }

它给了我404: Route not found.。请注意,我使用的是启用了AllowEncodedSlashes选项的Apache2。

我的猜测是我根本不知道如何正确编写正则表达式。由于我也对正则表达式不好,所以这对我来说并不奇怪。

我尝试了不同的变化。例如(.+)[.+]

# bin/console --env=dev debug:router | grep "/customer/unsubscribe/anon/"
  customer_communication_preferences_unsubscribe_anon           ANY        https    ANY    /customer/unsubscribe/anon/{hash}

路线定义:

customer_communication_preferences_unsubscribe_anon:
    path: /customer/unsubscribe/anon/{hash}
    defaults: { _controller: PizokelCustomerBundle:Communication:unsubscribeAnonCustomer }
    schemes: ['%routing.scheme.my_account%']

1 个答案:

答案 0 :(得分:0)

在路由定义中,您并不是说hash可以是任何字符。

尝试一下:

customer_communication_preferences_unsubscribe_anon:
    path: /customer/unsubscribe/anon/{hash}
    defaults: { _controller: PizokelCustomerBundle:Communication:unsubscribeAnonCustomer }
    schemes: ['%routing.scheme.my_account%']
    requirements:
        hash: .+