Kürzlich hat Ihnen der PHP-Editor Xigua einen Frage-und-Antwort-Artikel zu Java vorgelegt, in dem es darum geht, wie Sie vermeiden können, Backend-Details dem Client in Spring-Boot preiszugeben. Während des Entwicklungsprozesses ist der Umgang mit vertraulichen Informationen wie Ausnahmeinformationen und Fehleraufforderungen eines der Probleme, auf die sich Entwickler konzentrieren müssen, um den Verlust vertraulicher Daten zu vermeiden. Dieser Artikel beantwortet diese Fragen für Sie und hilft Ihnen dabei, die Sicherheit Ihrer Anwendungen besser zu schützen.
Wenn ein falscher/nicht vorhandenerspring-boot-Endpunkt auftritt. Klassendetails auf Codeebene werden angezeigt. Dies kann als Sicherheitsproblem gekennzeichnet werden.
Beispiel
Anfrage
localhost:8500/api/1.0/service/../msc -> this is a bad formatted endpoint, which does not exist.
Antwort
{ "timestamp": "2024-01-31t08:33:44.321+0000", "status": 400, "error": "bad request", "message": "failed to find lookuppath '/api/1.0/msc' within requesturi '/api/1.0/service/../msc'. this could be because the path has invalid encoded characters or isn't normalized.; nested exception is org.springframework.web.servlet.resource.resourceurlencodingfilter$lookuppathindexexception: failed to find lookuppath '/api/1.0/msc' within requesturi '/api/1.0/service/../msc'. this could be because the path has invalid encoded characters or isn't normalized.", "path": "/api/1.0/service/../msc" }
Ein Blick auf die Fehlermeldung zeigt, dass im Hintergrund eine Spring-Boot-Anwendung läuft, was eine Sicherheitslücke darstellen könnte, da die Details auf Codeebene in der Nachricht offengelegt werden.
Wie können wir dem Kunden eine allgemeine Nachricht anstelle der gesamten Ausnahmedetails senden?
Ich habe auch versucht, @controlleradvice zu verwenden, aber die Ausnahme wird darin nicht abgefangen. Es sieht so aus, als ob das Problem auftritt, bevor es überhaupt den Controller selbst erreicht.
@ExceptionHandler(Exception.class) public ResponseEntity handleException(Exception ex) { log.error("Exception in flow", ex); ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error"); }
Sie können eine Kombination von Methoden verwenden, um die Ausnahme zu behandeln und sie nicht preiszugeben. Sehen Sie sich//m.sbmmt.com/link/41fa3925a7ec42ce029c43d6676e4b2can, um die verschiedenen Arten von Handlern zu überprüfen.
Das obige ist der detaillierte Inhalt vonVermeiden Sie es, Backend-Details den Clients im Spring-Boot zugänglich zu machen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!