XSS攻击:更改Spring Boot CRUDRepository中抛出的异常?

时间:2017-09-21 11:59:58

标签: java spring spring-boot exception-handling xss

我正在开发一个应用程序的API,它能够根据解决方案ID(这是一个整数)找到所谓的ProductSolutions。

代码如下所示:

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

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

当使用字符串而不是整数(localhost:8080/api/v1/productSolutions/search/findBySolutionId?solutionId=dangerousscript)发送请求时,API会返回错误,并显示以下消息:

  

无法从类型[java.lang.String]转换为type   [@ org.springframework.data.repository.query.Param int]表示值   'dangerousscript';嵌套异常是   java.lang.NumberFormatException:对于输入字符串:   \ “dangerousscript \”“`

虽然看起来Chrome和Firefox整齐地逃避输入(并且不执行任何脚本),但人们仍然担心我们的API可能会用于跨站点脚本攻击。

解决此问题的一种简单方法是删除用户在抛出异常时提供的输入,或者创建我们自己的错误页面。我可以用什么方式配置spring boot来抛出自定义异常?

1 个答案:

答案 0 :(得分:2)

您可以在使用@ExceptionHandler注释的班级中定义@ControllerAdvice的方法。

您可以使用@ResponseBody注释此方法(如果您没有使用@RestController)并直接返回所需的响应或使用正确的消息重新抛出异常。

@ControllerAdvice
public class RestExceptionControllerAdvice {

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

}