在当前的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攻击?
最佳答案
通过POC(概念证明)来证明代码审查发现是非常困难的。在这种情况下,在理论上假设SSRF可能发生。当查询字符串值出现在任何代码段中,并且用户在该查询字符串中输入其他URL时,如果得到响应,则可能导致SSRF。您阅读了这篇文章-https://www.acunetix.com/blog/articles/server-side-request-forgery-vulnerability/。
因此,最好验证或格式化代码中使用的所有查询字符串值。 SSRF是一个长镜头,但是这些查询字符串值可能会导致XXS或SQL注入(仅取决于使用值的方式)。
在我看来,代码审查应导致开发人员思想上的轻微改变,并使他/她考虑安全性。我认为大多数代码审查都集中在价值如何进入,价值从何而来以及如何在代码中使用价值。只是要意识到数据流,并考虑如果恶意输入到来,会发生什么。