返回
拯救紧急状况:缓解 underscore 安全漏洞而不更新依赖项
前端
2023-10-18 22:04:47
紧急情况:underscore 安全漏洞
最近披露了一个影响流行的 JavaScript 库 underscore 的严重安全漏洞。此漏洞允许攻击者在使用 _.template()
函数时注入恶意代码,从而导致跨站点脚本 (XSS) 攻击。此漏洞已获得 CVE-2023-23336 的编号,并被评为严重级别。
依赖项困境
对于许多依赖于 underscore 库的应用程序来说,立即升级到最新版本并不是一个可行的选项。这可能是由于各种原因,例如:
- 依赖项冲突
- 向后兼容性问题
- 测试和验证需求
拯救紧急状况:局部范围和沙盒
在无法升级依赖项的情况下,缓解此漏洞的一种创新方法是使用局部范围和沙盒技术。此方法涉及将受影响的代码隔离到一个沙盒中,使其与应用程序的其余部分隔离。通过这种方式,即使存在漏洞,攻击者也无法利用它来影响应用程序的其余部分。
以下步骤概述了如何实现此解决方案:
- 识别受影响的代码: 确定应用程序中使用
_.template()
函数的所有代码。 - 创建沙盒函数: 创建一个新函数,将受影响的代码包裹在其中。
- 应用局部范围: 在沙盒函数中使用
Function()
构造函数来创建具有局部作用域的新函数。这将防止攻击者访问应用程序的全局作用域。 - 调用沙盒函数: 从应用程序的主代码中调用沙盒函数。
- 测试和验证: 彻底测试应用程序以确保该解决方案有效。
示例代码
以下示例代码展示了如何使用局部范围和沙盒来缓解 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 安全漏洞,即使无法更新依赖项。此方法提供了一种有效且创新的方式来保护应用程序免受攻击,同时避免引入新的错误或中断。通过实施本文概述的步骤,开发人员可以确保其应用程序的安全,同时保持对最新安全威胁的主动防御。