为什么 ZAP 认为在这种情况下存在缓冲区溢出?

Why does ZAP think there's a Buffer Overflow in this situation?

我发现了 ZAP 及其主动扫描程序。 我已尝试对易受攻击的 BodgeIT 商店的变体执行主动扫描。在 basket.jsp 页面中,后端代码如下所示:

stmt = conn.prepareStatement("INSERT INTO BASKETCONTENTS (BasketID, ProductID, Quantity, PriceToPay) VALUES (" + basketId + ", " + productId + ", " + Integer.parseInt(quantity) + ", " + price + ")"); // add it in the basket in the DB

quantity 变量应该是一个整数,其值是从客户端请求中获取的,作为 POST 参数。

ZAP 发现,当提供非数值时,后端 returns 错误 500 并关闭连接:

问题是,后端是用Java编写的,它有绑定检查机制,使得开发人员不可能引入缓冲区溢出漏洞(通过语言本身)。

那么,为什么 ZAP 认为存在缓冲区溢出,只是看到这个 "error 500" + "connection closed"?

编辑:我检查了缓冲区溢出的扫描规则并发现了这个:https://github.com/zaproxy/zap-extensions/blob/master/src/org/zaproxy/zap/extension/ascanrules/BufferOverflow.java#L119

ZAP 是否在每次收到内部服务器错误时都报告缓冲区溢出?

有些漏洞很难绝对确定地检测到。 在这种情况下,ZAP 提交了一个异常大的值,应用程序 return 出错了。

如 'Other info' 中所述,这 可能 缓冲区溢出。由您决定是现在还是现在。您已确定它不是,但您可能还想更改应用程序,以便在这些情况下它不会 return 500。