在使用fotify代码扫描时,程序中JavaScript 的 eval() 函数使用的地方会报Dynamic Code Evaluation:Code Injection,解释为动态代码评估、代码注入,Web 开发中。这两种风险都可能导致严重的安全问题.
其安全问题大致描述为
1、动态执行的代码可能会包含恶意代码,导致安全漏洞。 2、代码注入,通过各种方式注入恶意代码,这些代码可能会执行有害的操作,如窃取数据、篡改应用逻辑等。 3、动态生成的代码可能难以调试和维护,因为它可能依赖于运行时的数据。 4、远程执行脚本等风险
通过在网上搜索相关解决方案,最终形成解决方案为替换掉使用eval的地方。首先来看一下eval函数的强大功能
1、eval()可以执行任何有效的JavaScript代码,包括变量声明、表达式、语句、函数定义等
2、eval()可以用于动态执行代码、动态创建函数、动态解析JSON等
3、通过eval()函数,可以将字符串转换为可执行的代码,从而实现动态编程和代码的灵活性
根据对工程中所使用到的eval函数的分析,最终,使用JSON.parse()来替换,但替换过程也需要根据实际情况进行相应的修改。
一、动态JSON解析
当解析后端返回值形如var data = {datacount:1,datas:[{"t":1,"w":2}]}这种串时,由于此串并不是标准的json(标准的json键使用双引号包住)。当使用eval函数处理时,可以通过eval("(" + data+ ")")方式处理【由于该data字符串是以{}开始和结尾,当使用eval函数时,会将其当作一个语句块处理,所以需要使用括号表达式(expression),将其转化为对象】,转化为对象之后便可以方便的获取其中的属性。如果直接使用JSON.parse(),会解析错误。这样就需要对返回值的字符进行加工处理,可通过以下方法替换
var date = "{datacount:1,datas:[{\"t\":1,\"w\":2}]}
";
data = data.replace(/(\w+):/g, '"$1":');
var relVal = JSON.parse(data);
处理之后,获取又可通过对象调用方式获取,如relVal.datacount。
二、通过eval函数转化为可执行代码
如eval(2*"2"),需要返回4,可以使用JSON.parse(2*"2")替换。
当然还有更有效的安全方法作为替换方案解决fotify扫描问题,此仅作为一种方案介绍,如有疑问,欢迎讨论交流。
标签:Code,函数,代码,Dynamic,Fotify,JSON,eval,data From: https://www.cnblogs.com/ladyM/p/18334180