Chúng tôi đang sử dụng nginx để giảm tải giao thông https, proxy để một jasperserver cài đặt cục bộ (5.2) chạy trên cổng 8080.Chạy jasperserver đằng sau nginx: Tiềm năng CSRF tấn công
internet ---(https/443)---> nginx ---(http/8080)---> tomcat/jasperserver
Khi truy cập vào jasperserver trực tiếp trên cổng tất cả mọi thứ của nó Ổn. Khi truy cập vào các dịch vụ thông qua nginx một số chức năng bị phá vỡ (ví dụ như chỉnh sửa một người dùng trong giao diện người dùng jasperserver) và nhật ký jasperserver có mục như thế này:
CSRFGuard: potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, uri:%request_uri%, error:%exception_message%)
Sau khi một số lỗi, chúng tôi tìm ra nguyên nhân cho việc này:
Trong nginx cấu hình tiêu chuẩn của nó không phải là tiêu đề yêu cầu chuyển tiếp có chứa dấu gạch dưới trong tên của chúng. Tuy nhiên, Jasperserver (và khung OWASP) mặc định sử dụng dấu gạch dưới để truyền mã thông báo csrf (JASPER_CSRF_TOKEN
và OWASP_CSRFTOKEN
tương ứng).
Giải pháp là một trong hai:
nginx: cho phép dấu gạch trong tiêu đề
server { ... underscores_in_headers on;
- jasperserver: thay đổi tên cấu hình thẻ trong
jasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties
Xem thêm ở đây:
- header variables go missing in production
- http://wiki.nginx.org/HttpCoreModule#underscores_in_headers
Cùng một vấn đề, nhưng các nghị quyết ở đây không làm việc cho tôi - tôi đăng một câu hỏi mới để thông tin hy vọng bổ sung sẽ hiện ra ở đó: http://stackoverflow.com/ question/35691799/jasperserver-proxy-csrf-error – radshop