2012-02-09 25 views
7

Tôi đã kế thừa một dự án symfony2 trong môi trường trực tiếp chạy trên trên 2 máy chủ cân bằng tải. Phiên này được lưu trữ trong cơ sở dữ liệu mysql mà ứng dụng sử dụng vì lý do này.Thẻ CSRF không hợp lệ trong ứng dụng symfony2 cân bằng tải

Vấn đề tôi đang gặp phải là trên các biểu mẫu có bảo vệ CSRF đôi khi mã thông báo quay lại không hợp lệ. Tôi đoán điều này là do máy chủ đã tạo mã thông báo không phải lúc nào cũng là máy chủ nhận biểu mẫu POST và không thể khớp với mã thông báo được gửi.

Tôi rất, rất mới đối với symfony và đã thử một vài giải pháp khác nhau để tạo mã thông báo sử dụng phiên và SessionCsrfProvider từ khung công tác Symfony.

Có ai có thể chỉ cho tôi đúng hướng hoặc có vấn đề tương tự không?

+0

Phiên làm việc có hoạt động như dự kiến ​​không? –

+0

Có quản lý phiên cho người dùng hoạt động tốt. Nó chỉ là cảnh báo mã thông báo csrf được đặt ra nếu biểu mẫu được đăng trở lại máy chủ mà nó không bắt nguồn từ đó. Tôi đã thử nghiệm điều này bằng cách chỉ làm việc trên một trong các máy chủ cân bằng tải bằng cách sử dụng địa chỉ IP. – chrishey

+0

Những gì tôi đang đấu tranh với sự hiểu biết nếu SessionCsrfProvider đang sử dụng phiên được lưu trữ trong cơ sở dữ liệu hay không. Bạn có mẹo nào về gỡ lỗi không? nó là khó khăn để kiểm tra như là môi trường cân bằng tải duy nhất chúng ta có là sống. Cảm ơn – chrishey

Trả lời

2

CsrfProviders sẽ tạo mã thông báo bằng cách ghép nối khóa bí mật (từ parameters.ini) + ý định (mặc định là null) + id phiên.

Theo mặc định, symfony được định cấu hình để sử dụng SessionCsrfProvider, sử dụng phiên bộ nhớ id.

Nếu bạn đang sử dụng đối tượng PDOSessionStorage hoặc NativeSessionStorage, nó sẽ trả về session_id().

Điều này có nghĩa là session_id() của bạn không giống nhau tùy thuộc vào máy xử lý yêu cầu.

+3

Có vẻ như sửa chữa là khóa bí mật parameters.ini không giống nhau trên cả hai máy chủ và ngay cả khi tôi sửa lỗi này, nó không có hiệu lực cho đến khi tôi xóa bộ nhớ cache của ứng dụng và khởi động lại apache trên cả hai máy chủ một vài lần. Cảm ơn tất cả sự giúp đỡ của bạn. – chrishey

Các vấn đề liên quan