我們有一個 Symfony 防火墻,它只對某個主機有效。當用戶向受此防火墻保護的頁面發出請求時,我們正在捕獲請求并執行正確的批準/拒絕/請求登錄步驟。
它看起來像這樣,大致(洗掉了一些位)并允許此防火墻使用 our-domain.com 和直接子域。
main:
pattern: ^/.*
form_login: ...
anonymous: true
host: '^((([^.]) \.)?our-domain\.com)$'
guard: ...
然而,我們發現一個(厚顏無恥的)人偶爾會訪問這些 URL 中的一個,但訪問的是不同的主機,例如 IP 地址或不同的域。由于防火墻與該主機不匹配,我們得到以下例外:
令牌存盤不包含身份驗證令牌。一個可能的原因可能是沒有為此 URL 配置防火墻。
我們正在探索不同的方法來阻止對“不允許”主機的請求,但我們還沒有找到合適的答案。
一個似乎正確的選項是“全部拒絕”或“捕獲所有其他”型別的防火墻 - 我們可以說“如果您不匹配任何其他防火墻,則將其視為不允許”。
有沒有辦法在 Symfony 中做到這一點?
uj5u.com熱心網友回復:
如果你執行bin/console debug:router,你會得到類似這樣的輸出:
Name Method Scheme Host Path
---------------- ------- ------- ----- --------------------------------------------
homepage ANY ANY ANY /
contact GET ANY ANY /contact
如您所見,默認情況下,所有 URI 都可以在您的網路服務器配置可訪問的所有主機上訪問。
如果要將它們限制在給定的主機上并回傳 404,則可以在路由配置中使用該host引數。
為了避免必須將引數添加到每個@Route注釋,您可以通過 yaml 全域配置它:
# config/routes/annotations.yaml
controllers:
resource: '../../src/Controller/'
type: annotation
host: '^((([^.]) \.)?our-domain\.com)$'
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/415103.html
標籤:
