如何修复 spring restTemplate 中的 "Server-Side Request Forgery" 问题

How to fix "Server-Side Request Forgery" issue in spring restTemplate

使用 spring restTemplate 时在 Fortify 报告中出现 "Server-Side Request Forgery" 问题。

我正在使用 restTemplate 调用其他 REST 服务,并从我的控制器 class 传递这个 url。 url 在我的控制器中是硬编码的,而不是用户控制的数据。

HttpEntity<R> response = restTemplate.exchange(uri, HttpMethod.POST, entity,
parameterizedTypeReference);

不确定如何解决这个问题。

这是您的 SAST 扫描仪的误报

SSRF 被控制服务器发出的传出请求的攻击者利用。如果 uri 确实是硬编码的,那么攻击者就无法影响请求的去向,因此它确实看起来是误报。然而,尽管 Fortify 以误报着称,但我还没有看到它犯这种类型的错误(即尽管 URI 是硬编码的,但声称 SSRF),所以听到它我有点惊讶。您是否检查过 Fortify 提供的整个源到接收器跟踪?如果它只报告一条线作为源和汇,那么是的,它是误报。如果还有更多,那么如果您提供完整的跟踪信息将会很有帮助。

正如 TheGreatContini 所说,uri 不应该被硬编码。我们还可以在调用之前使用 UriComponents 构建 URI。

UriComponents uriComponents = UriComponentsBuilder.newInstance()
  .scheme("http").host("www.yourdomain.com").path("/yourPath").build();

这将为您构建 URL 并修复服务器端请求伪造。