You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Veracode检测FileAPI.js存在CWE 95(Eval注入)漏洞,如何修复?

搞定FileAPI.js里的CWE 95(Eval注入)漏洞

为啥会出这个漏洞

原parseJSON函数里,当浏览器没原生JSON.parse时,用new Function动态拼接代码执行——这和eval的风险完全一致,要是传入的字符串被攻击者篡改,就能执行恶意代码,所以Veracode标记了CWE 95漏洞。

你现有修改的优劣

  • 优点:直接移除了危险的动态代码执行逻辑,彻底消除了注入风险,符合安全要求。
  • 缺点:在不支持JSON.parse的极旧浏览器(比如IE7及更早)中,JSON解析功能会直接失效并抛出错误。

几种靠谱的处理方案

方案1:安全兼容旧浏览器(推荐)

如果必须兼容无JSON.parse的老浏览器,别用动态执行那套逻辑,改用安全的JSON解析polyfill。可以自己实现基础的解析逻辑,或者用经过安全审计的兼容代码(避开带动态执行的版本)。

示例代码:

parseJSON: function (str) {
    var json;
    if (window.JSON && JSON.parse) {
        json = JSON.parse(str);
    } else {
        // 先做严格格式校验,过滤危险内容
        var isValidJSON = /^[\],:{}\s]*$/.test(
            str.replace(/\\["\\\/bfnrtu]/g, '@')
               .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
               .replace(/(?:^|:|,)(?:\s*\[)+/g, '')
        );
        if (!isValidJSON) {
            throw new Error('Invalid JSON string');
        }
        // 校验通过后再执行,大幅降低风险(追求绝对安全可完全手动解析)
        try {
            json = (new Function('return ' + str))();
        } catch (e) {
            console.error('JSON解析失败:', e);
            throw e;
        }
    }
    return json;
}

提示:上述校验规则参考了原生JSON.parse的安全校验逻辑,能过滤绝大多数恶意注入。要是想做到绝对安全,最好自己写递归解析JSON字符串的逻辑,完全避开动态执行函数。

方案2:直接放弃旧浏览器(最省心)

如果你的项目不需要兼容IE7这类古董浏览器,就保留你现有的修改即可——现在几乎所有主流浏览器(包括IE8及以上)都原生支持JSON.parse,这种方案简单直接,且彻底规避风险。

方案3:升级FileAPI.js版本

检查FileAPI.js的后续版本,官方大概率已经修复了这个漏洞。比如v2.0.7之后的版本,可能已经移除了new Function的逻辑,改用原生解析或安全兼容方案,直接升级是最省心的解决方式。

验证建议

修改完成后,用Veracode重新扫描确认漏洞已修复;同时测试不同浏览器(包括需要兼容的旧浏览器)的JSON解析功能,确保安全和功能两不误。

内容的提问来源于stack exchange,提问作者pear rose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:05:10