2017-09-21 2 views
2

Je développe une API pour une application capable de trouver ce que l'on appelle des ProductSolutions en fonction de leur solutionID (qui est un entier).Attaques XSS: modification d'une exception lancée dans un CRUDRepository de démarrage au printemps?

Le code ressemble à ceci:

@Repository 
public interface ProductSolutionRepository extends CrudRepository<ProductSolution, String> { 

    public List<ProductSolution> findBySolutionId(@Param("solutionId") int solutionId); 
} 

Lors de l'envoi d'une demande avec une chaîne au lieu d'un entier (localhost:8080/api/v1/productSolutions/search/findBySolutionId?solutionId=dangerousscript) l'API renvoie une erreur avec le message suivant:

Échec de la conversion du type [java.lang.String] au type [@ org.springframework.data.repository.query.Param int] pour la valeur 'dangerousscript'; exception imbriquée est java.lang.NumberFormatException: Pour chaîne d'entrée: \ « dangerousscript \ » "`

Bien qu'il semble que Chrome et Firefox sont échappaient soigneusement l'entrée (et ne pas exécuter les scripts) personnes Nous avons toujours peur que notre API puisse être utilisée pour les attaques de script inter-sites

Une façon simple de résoudre ce problème serait de supprimer l'entrée que l'utilisateur a donnée lorsque nous levons une exception, ou de créer notre propre page d'erreur. Configurer le démarrage du ressort pour lancer une exception personnalisée?

+0

Cela n'a rien à voir avec les scripts inter-sites. C'est juste que vous essayez d'envoyer une chaîne où Spring attend un entier, et renvoie correctement une exception. Je ne vois pas comment cela pourrait être un problème? – g00glen00b

Répondre

2

Vous pouvez définir une méthode avec @ExceptionHandler en classe annoté avec @ControllerAdvice.

Vous pouvez soit annoter cette méthode avec @ResponseBody (si vous n'utilisez pas @RestController) et retourner directement la réponse désirée ou relancer l'exception avec le message correct.

@ControllerAdvice 
public class RestExceptionControllerAdvice { 

    @ExceptionHandler(NumberFormatException.class) 
    public ErrorResponse handleSearchParseException(NumberFormatException exception) { 
     // do whathever you want 
    } 

}