返回

数据消毒难题:如何让 Checkmarx 通过 Node/Express 应用程序扫描

javascript

如何通过 Checkmarx 对 Node/Express 的扫描,去除数据消毒漏洞

简介

Checkmarx 是一种静态应用程序安全测试 (SAST) 工具,可帮助识别 Node.js 应用程序中的安全漏洞。然而,它经常会标记像 request.pathrequest.url 这样的属性为“未正确消毒或验证”,即使已经尝试了各种数据消毒工具和 JavaScript 解决方案。

本文将深入探讨此问题的根本原因,并提供逐步解决方法,以确保应用程序通过 Checkmarx 扫描。

问题根源

Checkmarx 扫描主要关注输入验证和数据消毒。在 Node/Express 应用程序中,从请求对象访问的属性可能会包含恶意输入,需要在使用前进行验证和消毒。

解决方法

1. 输入验证

  • 使用 Express 内置中间件或第三方库(如 Express Validator 或 Joi)验证请求数据类型、长度、范围和其他限制。

2. 数据消毒

  • 使用数据消毒库(如 DOMPurify、XSS、XSS-filters 或 Node-ESAPI)删除或编码恶意输入。

3. 手动验证

  • 对于自定义输入或 Checkmarx 扫描器无法识别的库,请手动验证数据是否安全。

4. 配置 Checkmarx 扫描器

  • 确保 Checkmarx 扫描器已正确配置,可以识别已实施的消毒机制。

代码示例

以下 Node.js/Express 代码示例展示了如何实现输入验证和数据消毒:

const express = require('express');
const sanitize = require('sanitize-html');

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

const sanitizer = sanitize.sanitizeHtml;

app.post('/api/submit', (req, res) => {
  const userInput = sanitizer(req.body.input);

  // 进一步处理已消毒的用户输入...
});

app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

注意要点

  • 始终对所有用户输入进行验证和消毒。
  • 使用 Checkmarx 推荐的消毒库或已知可靠的第三方库。
  • 避免使用不安全的消毒方法,例如 request.path.replace()
  • 定期更新消毒库和 Checkmarx 扫描器配置以保持最新状态。
  • 通过全面测试和代码审查确保解决方案的有效性。

常见问题解答

1. 为什么 Checkmarx 标记 request.pathrequest.url 为不安全?

request.pathrequest.url 可以包含恶意输入,如路径遍历或命令注入攻击,因此 Checkmarx 会标记它们为不安全。

2. 如何手动验证自定义输入?

使用正则表达式或自定义函数检查输入是否符合特定模式。例如,可以检查电子邮件地址是否包含 @ 符号。

3. 如何配置 Checkmarx 扫描器?

在 Checkmarx 扫描配置中指定已使用的消毒库和任何自定义验证规则。

4. 如何确保解决方案的有效性?

通过全面测试和代码审查验证已实施的解决方案。

5. 有哪些其他方法可以提高 Node/Express 应用程序的安全性?

除了输入验证和数据消毒之外,还可以使用其他安全措施,例如身份验证、授权、加密和安全标头。