SV.DATA.BOUND

在不完全受信任的存储(例如会话属性)中存储未验证的用户数据时,会发生该错误。

从 2023.2 版本开始,此检查器将支持 Jakarta EE。

漏洞与风险

getParameter() 之类的源始终被视为受到污染,而用户必须对其执行服务器验证。服务器验证包含从其他被视为安全的结构(例如会话属性或数据库)中读取数据。如果在此类结构中存储未检查的用户数据,则会面临出现其他漏洞的风险。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

在将用户数据输入可靠来源(例如数据库或会话属性)之前,先对其进行验证。

示例 1

复制
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("userName");
         HttpSession sess = req.getSession();
         sess.setAttribute("user", name);
     }

针对第 18 行报告 SV.DATA.BOUND:在第 16 行的“name”中存储的未验证的用户输入现在存储在第 18 行的 HTTP 会话中。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。