Maison >Java >Évitez d'exposer les détails du backend aux clients lors du démarrage au printemps

Évitez d'exposer les détails du backend aux clients lors du démarrage au printemps

王林
王林avant
2024-02-22 12:28:06685parcourir

Récemment, l'éditeur PHP Xigua vous a présenté un article de questions-réponses sur Java, axé sur la manière d'éviter d'exposer les détails du backend au client lors du démarrage au printemps. Au cours du processus de développement, la manière de gérer les informations sensibles telles que les informations d'exception et les invites d'erreur pour éviter les fuites de données sensibles est l'une des questions sur lesquelles les développeurs doivent se concentrer. Cet article répondra pour vous à ces questions et vous aidera à mieux protéger la sécurité de vos applications.

Contenu de la question

Lorsque vous rencontrez un point de terminaison spring-boot incorrect/inexistant. Les détails de la classe au niveau du code sont exposés. Cela peut être signalé comme un problème de sécurité.

Exemple

Demande

localhost:8500/api/1.0/service/../msc -> this is a bad formatted endpoint, which does not exist.

Réponse

{
    "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"
}

En regardant simplement le message d'erreur, nous pouvons dire qu'une application Spring-boot s'exécute en arrière-plan, ce qui pourrait constituer une vulnérabilité puisque les détails au niveau du code sont exposés dans le message.

Comment pouvons-nous envoyer un message générique au client au lieu de tous les détails de l'exception ?

J'ai également essayé d'utiliser @controlleradvice mais l'exception n'y est pas prise en compte. Il semble que le problème se produise avant même qu’il n’atteigne le contrôleur lui-même.

@ExceptionHandler(Exception.class)
public ResponseEntity handleException(Exception ex) {
log.error("Exception in flow", ex);
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Internal Server Error");
}

Solution de contournement

Vous pouvez utiliser une combinaison de méthodes pour gérer l'exception et ne pas la divulguer, voir https://www.php.cn/link/41fa3925a7ec42ce029c43d6676e4b2c pour vérifier les différents types de gestionnaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer