在我当前的应用程序中,在Spring中,我们有如下所示的网关模块代码。
URI uri = new URI(restURLProtocol, null, URLDomain, URLPort, "/api" + request.getRequestURI(), request.getQueryString(), null);网关模块将使用工作良好的AsyncRestTemplate在同一服务器上调用另一个应用程序。
但是,像chekmarx这样的工具表明,代码对于SSRF(服务器端请求伪造)攻击是可以成功的,因为攻击者可以通过发送请求中的URL或其他数据来控制请求的目标。
那么,是否有任何方法可以检查request.getString()是否容易受到java中的SSRF攻击?
发布于 2020-01-15 08:21:31
很难通过POC (概念证明)来证明代码评审发现。在这种情况下,假设SSRF可以发生“理论上的”。当查询字符串值出现在任何代码中,用户在该查询字符串中输入不同的url时,如果得到响应,则可能导致SSRF。你读过这篇文章- https://www.acunetix.com/blog/articles/server-side-request-forgery-vulnerability/。
因此,最好验证或格式化代码中使用的任何查询字符串值。SSRF是一个长期目标,但是这些查询字符串值可能导致XXS或SQL注入(仅取决于使用值的方式)。
在我看来,代码评审应该导致开发人员的想法发生轻微的透视图变化,并让他/她考虑安全性。我认为大部分的代码评审都集中在价值是如何产生的,价值是从哪里进来的,以及它是如何在代码中使用的。只要注意数据流,并考虑如果恶意输入来了,会发生什么。
https://stackoverflow.com/questions/41159218
复制相似问题