返回

拯救紧急状况:缓解 underscore 安全漏洞而不更新依赖项

前端

紧急情况:underscore 安全漏洞

最近披露了一个影响流行的 JavaScript 库 underscore 的严重安全漏洞。此漏洞允许攻击者在使用 _.template() 函数时注入恶意代码,从而导致跨站点脚本 (XSS) 攻击。此漏洞已获得 CVE-2023-23336 的编号,并被评为严重级别。

依赖项困境

对于许多依赖于 underscore 库的应用程序来说,立即升级到最新版本并不是一个可行的选项。这可能是由于各种原因,例如:

  • 依赖项冲突
  • 向后兼容性问题
  • 测试和验证需求

拯救紧急状况:局部范围和沙盒

在无法升级依赖项的情况下,缓解此漏洞的一种创新方法是使用局部范围和沙盒技术。此方法涉及将受影响的代码隔离到一个沙盒中,使其与应用程序的其余部分隔离。通过这种方式,即使存在漏洞,攻击者也无法利用它来影响应用程序的其余部分。

以下步骤概述了如何实现此解决方案:

  1. 识别受影响的代码: 确定应用程序中使用 _.template() 函数的所有代码。
  2. 创建沙盒函数: 创建一个新函数,将受影响的代码包裹在其中。
  3. 应用局部范围: 在沙盒函数中使用 Function() 构造函数来创建具有局部作用域的新函数。这将防止攻击者访问应用程序的全局作用域。
  4. 调用沙盒函数: 从应用程序的主代码中调用沙盒函数。
  5. 测试和验证: 彻底测试应用程序以确保该解决方案有效。

示例代码

以下示例代码展示了如何使用局部范围和沙盒来缓解 underscore 安全漏洞:

// 沙盒函数
function sandboxedTemplate(templateString, data) {
  // 创建具有局部作用域的新函数
  const templateFunction = new Function('data', `
    with (data) {
      return \`${templateString}\`;
    }
  `);

  // 调用局部作用域函数
  return templateFunction(data);
}

// 主代码
const template = '<%= name %>';
const data = { name: 'John' };

// 使用沙盒函数渲染模板
const renderedTemplate = sandboxedTemplate(template, data);

结论

利用局部范围和沙盒技术,开发人员可以立即缓解 underscore 安全漏洞,即使无法更新依赖项。此方法提供了一种有效且创新的方式来保护应用程序免受攻击,同时避免引入新的错误或中断。通过实施本文概述的步骤,开发人员可以确保其应用程序的安全,同时保持对最新安全威胁的主动防御。