SV.XSS.DB

当检测到应用程序数据库中存在跨站脚本时,将报告此错误。当未经检查的用户输入重新传递给 Web 接口时,会发生跨站脚本漏洞。

漏洞与风险

在 Web 接口中使用的信息中使用未经检查的用户输入,会导致 XSS 或跨站脚本漏洞。该数据可能包含任意内容,比如 HTML 和 SCRIPT 标记。如果该信息显示给系统的其他用户,这些脚本可能被用于操纵用户的会话,将他们定向至其他网站,执行“钓鱼”攻击或运行其他恶意脚本内容。该漏洞在 Web 应用程序的留言板系统上很常见,在这里用户可能将信息发布给其他用户。必须对该内容进行严格屏蔽,以防止将 HTML 或 SCRIPT 标记注入到其他用户所看到的输出中。

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

缓解与预防

通常,可以通过验证所有来自应用程序外部的输入(用户输入、文件输入、系统参数等等)实现对跨站脚本漏洞的预防。验证应包括长度和内容。通常仅需要字母数字字符(即 A-Z、a-z、0-9)。应对任何其他接受的字符进行转义。尤其是对于 XSS 漏洞,用户输入中不得包含任何标记。应该在每个数据源处进行该验证,例如从 HTTP 请求读取每个参数时。应在服务器端进行验证,客户端验证不足以针对 XSS 提供保护,因为用户无需客户端浏览器便能够发送原始的 HTTP 数据包。

示例 1

复制
     protected void printComment(Connection conn, ServletOutputStream out, String user) throws SQLException, IOException {
         PreparedStatement pr = conn.prepareStatement("SELECT * FROM comms WHERE user = ?");
         pr.setString(0, user);
         String comment = pr.executeQuery().getString("comment");
         out.println("Comments: " + comment);
     }

针对第 19 行报告 SV.XSS.DB:comment 包含来自数据库的数据(第 18 行)。它在第 19 行被用于渲染网页。这意味着之前存储在数据库中的信息未经验证便用于渲染 Web 页面,该信息可能包含任意的 HTML 和 JavaScript 内容。为了利用该漏洞,还必须存在数据库注入漏洞。

相关检查器

安全培训

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

扩展

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