3

在我当前位于 Spring MVC 中的应用程序中,我们为网关模块提供了如下代码。

URI uri = new URI(restURLProtocol, null, URLDomain, URLPort, "/api" +    request.getRequestURI(), request.getQueryString(), null);

网关模块将使用工作正常的AsyncRestTemplate调用同一服务器上的另一个应用程序。

但是像chekmarx这样的工具表明,代码request.getString()很容易受到SSRF(服务器端请求伪造)攻击,因为攻击者可以通过在请求中发送 URL 或其他数据来控制请求的目标。

那么有什么方法可以检查request.getString()在 java 中是否容易受到 SSRF 攻击?

4

1 回答 1

0

通过 POC(概念证明)证明代码审查发现非常困难。在这种情况下,“理论上”假设 SSRF 可能发生。当查询字符串值出现在任何代码段中并且用户在该查询字符串中输入不同的 url 时,如果它得到响应,则可能导致 SSRF。您阅读了这篇文章 - https://www.acunetix.com/blog/articles/server-side-request-forgery-vulnerability/

因此最好验证或格式化代码中使用的任何查询字符串值。SSRF 是一个长镜头,但这些查询字符串值可能会导致 XXS 或 SQL 注入(仅取决于使用值的方式)。

在我看来,代码审查应该会导致开发人员思想的轻微转变,并让他/她考虑安全性。我认为大多数代码审查都关注价值是如何进入的,价值从哪里进入以及如何在代码中使用它。只要注意数据流,想想如果恶意输入出现,会发生什么。

于 2020-01-15T08:21:31.863 回答