GirlsBoy
回首向来萧瑟处,归去,也无风雨也无晴。

  在使用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扫描问题,此仅作为一种方案介绍,如有疑问,欢迎讨论交流。

posted on 2024-07-31 10:55  GirlsBoy  阅读(86)  评论(0编辑  收藏  举报

java\web应用开发&研究

梦想程序改变生活

成为一个了不起的人