2017-03-20 2 views
0

Ich versuche, Tomcat 5.5 + JDK 5 auf Tomcat 8.5.x + JDK 1.7 zu aktualisieren Die Anwendung, die auf diesem Server bereitgestellt wird, ist eine Legacy-Anwendung, die FTL (2.3.4) + DWR (2.0.3) + Spring (2.5.5) frameworksDWR SecurityException: HttpSessionId ist leer in POST-Anfrage

Bei der Bereitstellung auf Tomcat 8.5.6 + JDK 7 bekomme ich Fehler bei einigen Aktionen, die eine POST-Anfrage von der Anwendung ausführen. Die meisten dieser Aktionen sind DWR-Aufrufe zum Filtern/Bearbeiten von Daten, die auf dem Bildschirm angezeigt werden.

Es wird eine Popup-Meldung "Sitzungsfehler" auf dem Bildschirm angezeigt. Beim Front-End-Profiling habe ich festgestellt, dass der vollständige Fehler eine SecurityException ist, die zu SessionError führt.

Session Error - SecurityException

Wenn auf Server-Seite debuggt Ich fand heraus, dass der Antrag als Angriff CSRF behandelt wurde und deshalb wird diese Ausnahme ausgelöst wurde. DWR überprüft die HTTP-Sitzungs-ID im Hauptteil der POST-Anfrage, um die Anfrage gegen die CSRF-Möglichkeit zu validieren. Also im Front-End-Debugging habe ich festgestellt, dass die Anfrage nicht die httpSessionId im POST-Body sendet.

Request header and body sind wie hier gezeigt.

Ich habe versucht, den crossDomainSessionSecurity Parameter in DWR-Servlet-Initialisierung zu deaktivieren. Es funktioniert danach gut, aber ich kann nicht mit dem Sicherheitsrisiko, das es in der Produktionsumgebung darstellt, fortfahren.

Aufgrund dieses Problems kann ich die Tomcat-Migration nicht fortsetzen. Bitte schlagen Sie vor, wie kann ich dieses Problem beheben?

Antwort

1

Ich habe nach einigen neuen Funktionen in Tomcat 8 gesucht. Ich habe gelesen, dass ab Tomcat 6 Tomcat standardmäßig nur HTTP-Anfragen zulässt. Das bedeutet, dass das useHttpOnly-Flag standardmäßig true ist. Dies führt dazu, dass die JavaScript-Anforderungen fehlschlagen. In der Bereitstellung habe ich versucht, indem Sie die Verwendung HttpOnly = "false" und die Anwendung funktioniert danach gut. Ich werde mehr Tests auf meiner Seite machen, also können wir jetzt dieses Problem als gelöst betrachten.