我目前正在使用 symfony 5.4,我想了解如何洗掉 REMEMBERME 服務器端
我試圖在下面設定delete_cookies引數:security.yamllogout
main:
lazy: true
provider: app_user_provider
switch_user: true
form_login:
login_path: app_login
check_path: app_login
remember_me:
secret: '%kernel.secret%'
lifetime: 604800 # 1 week in seconds
secure: true
logout:
path: app_logout
delete_cookies:
REMEMBERME: { path: null, domain: null}
但是以同樣的方式,如果使用郵遞員我通過僅放置 REMEMBERME cookie 來重做受保護路由中的呼叫,即使沒有登錄,它也會向我顯示受保護的路由......如果有人設法攔截任何 REMEMBERME已連接的用戶,他們可以訪問系統...
uj5u.com熱心網友回復:
記住我Cookie有兩種作業方式。有關令牌存盤,請參閱Symfony 檔案
基于簽名的令牌默認情況下,記住我的 cookie 包含基于用戶屬性的簽名。如果屬性更改,則簽名更改并且已生成的令牌不再被視為有效。
持久性令牌持久性令牌存盤任何生成的令牌(例如在資料庫中)。這允許您通過更改資料庫中的行來使令牌無效。
持久令牌可能更安全,因為您可以隨時通過資料庫使令牌無效。在您的情況下,您可以在注銷時使令牌無效。
但是,您仍然可以通過在您的remember_me防火墻下使用signature_properties使基于簽名的令牌無效。
# config/packages/security.yaml
security:
# ...
firewalls:
main:
# ...
remember_me:
secret: '%kernel.secret%'
# ...
signature_properties: ['password', 'updatedAt']
例如,您可以在您的用戶物體中創建一個新欄位,例如。rememberMeKey例如生成一個隨機的 16 位代碼。
bin2hex(random_bytes(8));
然后像這樣將它添加到 signature_properties 中signature_properties: ['password', 'updatedAt', 'rememberMeKey']。
現在,當您想使其無效時,您可以在用戶物體中為該屬性重新生成一個新代碼,在您的情況下,當用戶注銷時。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427361.html
