2012-02-09 11 views
7

Canlı ortamda 2 den fazla yük dengeli sunucularda çalışan bir symfony2 projesi miras aldım. Oturum, uygulamanın bu nedenle kullandığı mysql veritabanında saklanır.Yük dengeli symfony2 uygulamada CSRF belirteci geçersiz

Yapmakta olduğum sorun, CSRF koruması olan formlarda bazen jetonun geri döndüğünün geçerli olmamasıdır. Bunun nedeni, belirteci oluşturan sunucunun her zaman POST formunu alan ve gönderilmekte olan belirteçle eşleşemeyen sunucu olmamasıdır.

Symfony çerçevesinden oturum ve SessionCsrfProvider'ı kullanarak belirteci oluşturmak için birkaç yeni çözüm önerdim.

Beni doğru yöne yönlendiren veya benzer bir sorunu olan var mı?

+0

Oturum, aksi şekilde beklendiği gibi çalışıyor mu? –

+0

Evet, kullanıcılar için oturum yönetimi iyi çalışıyor. Yalnızca, formun, kaynaklanmadığı sunucuya geri gönderilmesi durumunda belirlenen csrf belirteç uyarısıdır. Bunu, IP adresini kullanarak yük dengelenmiş sunuculardan biri üzerinde çalışarak test ettim. – chrishey

+0

SessionCsrfProvider'ın veritabanında depolanmış olan oturumu kullanıp kullanmadığını anlamak için uğraşıyorum. Hata ayıklama konusunda herhangi bir ipucu var mı? Yaşadığımız tek yük dengeli ortam olarak test etmek zor. Teşekkürler – chrishey

cevap

2

CsrfProviders, gizli anahtarın (parameters.ini) + intention (default = null) + oturum kimliğinin oturumunu birleştirerek jeton üretecektir.

Varsayılan olarak, symfony, depolaması numaralı kimlik oturumunu kullanan SessionCsrfProvider'u kullanmak üzere yapılandırılmıştır.

PDOSessionStorage veya NativeSessionStorage nesnesini kullanıyorsanız, session_id() döndürecektir.

Bu, session_id() ürününüzün, hangi makinenin isteği ele aldığına bağlı olarak aynı olmadığı anlamına gelebilir.

+3

Düzeltme, parameters.ini gizli anahtarının her iki sunucuda da aynı olmadığı ve bu düzeltmeyi yaptığımda uygulamanın önbelleğini temizledikten ve iki sunucuda apache'yi yeniden başlatıncaya kadar etkili olmadığının anlaşılması gibi görünüyor. Yardımların için teşekkür ederim. – chrishey