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
相关产品推荐
相关产品推荐

