Stiamo usando nginx per scarico del traffico HTTPS, il proxy ad un JasperServer installato localmente (5.2) in esecuzione sulla porta 8080.Esecuzione JasperServer dietro nginx: Potenziale attacco CSRF
internet ---(https/443)---> nginx ---(http/8080)---> tomcat/jasperserver
Quando si accede alla JasperServer direttamente sulla sua tutto porto è ok. Quando si accede al servizio tramite nginx alcune funzionalità sono rotti (ad esempio, la modifica di un utente nell'interfaccia utente JasperServer) e il registro JasperServer ha voci come questo:
CSRFGuard: potential cross-site request forgery (CSRF) attack thwarted (user:%user%, ip:%remote_ip%, uri:%request_uri%, error:%exception_message%)
Dopo un po 'di debug abbiamo trovato la causa di questo:
Nella sua configurazione standard, nginx non inoltra le intestazioni delle richieste che contengono caratteri di sottolineatura nel loro nome. Jasperserver (e il framework OWASP) tuttavia, per impostazione predefinita, utilizza underscore per la trasmissione del token csrf (JASPER_CSRF_TOKEN
e OWASP_CSRFTOKEN
rispettivamente).
soluzione è a uno:
nginx: permettono di sottolineatura nelle intestazioni
server { ... underscores_in_headers on;
- JasperServer: cambiano nome della configurazione gettone in
jasperserver-pro/WEB-INF/esapi/Owasp.CsrfGuard.properties
vedi anche qui:
- header variables go missing in production
- http://wiki.nginx.org/HttpCoreModule#underscores_in_headers
Stesso problema, ma le risoluzioni qui non ha funzionato per me - ho inviato una nuova domanda in modo da informazioni aggiuntive si spera verrà mostrata lì: http://stackoverflow.com/ questions/35691799/jasperserver-proxy-csrf-error – radshop