首页 > 其他分享 >Fotify扫描问题Dynamic Code Evaluation:Code Injection

Fotify扫描问题Dynamic Code Evaluation:Code Injection

时间:2024-07-31 10:55:42浏览次数:7  
标签:Code 函数 代码 Dynamic Fotify JSON eval data

  在使用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

相关文章

  • Educational Codeforces Round 168 (Rated for Div. 2) 补题记录(A~E)
    A直接暴力枚举字符添加在哪里,以及添加的字符是什么即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=500100;signedmain(){intT;cin>>T;while(T--){strings;cin>>s;stringans;i......
  • IDEA 字节码工具 jclasslib bytecode viewer
    IDEA字节码工具jclasslibbytecodeviewer 1.下载安装 首先我们在IDEA的插件市场中搜索jclasslibbytecodeviewer和进行下载安装,安装过后根据IDEA版本的不同,可能需要重启才能使用。   2.使用 下载安装过后,在我们的项目中,首先先将整个项目进行编译,编译的......
  • Leetcode每日一题 20240729 682.棒球比赛
    题目描述你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述规则:整数x:表示本回合新获......
  • Leetcode每日一题 202040726 2740.找出分区值
    题目描述给你一个正整数数组nums。将nums分成两个数组:nums1和nums2,并满足下述条件:数组nums中的每个元素都属于数组nums1或数组nums2。两个数组都非空。分区值最小。分区值的计算方法是|max(nums1)-min(nums2)|。其中,max(nums1)表示数组nums1......
  • Leetcode每日一题 20240727 3106.满足约束且字典序最小的字符串
    题目描述给你一个字符串s和一个整数k。定义函数distance(s1,s2),用于衡量两个长度为n的字符串s1和s2之间的距离,即:字符‘a’到‘z’按循环顺序排列,对于区间[0,n-1]中的i,计算所有「s1[i]和s2[i]之间最小距离」的和。例如,distance(“ab”,......
  • Leetcode每日一题 20240730 2961.双模幂运算
    题目描述给你一个下标从0开始的二维数组variables,其中variables[i]=[ai,bi,ci,mi],以及一个整数target。如果满足以下公式,则下标i是好下标:0<=i<variables.length((aibi%10)ci)%mi==target返回一个由好下标组成的数组,顺序不限。2961.双模幂......
  • 代码随想录算法训练营Day0| LeetCode704: 二分查找
    LeetCode704二分查找先看了一下数组理论基础:数组基础题目链接:704.二分查找啥也没看,凭感觉直接上手:classSolution(object): defsearch(self,nums,target): fornuminnums: ifnum==target: returnnums.index(num) break return-1通过倒是......
  • Unicode编码详细介绍
    Unicode是一个国际标准,用于为世界上几乎所有的字符和文本符号提供一个唯一的数字标识。它旨在解决传统的字符编码方案中存在的多种问题,比如字符集不兼容、编码冲突等。Unicode允许计算机以一种统一的方式处理、存储和交换文本数据,无论这些数据是使用哪种语言或符号系统。Unico......
  • (nice!!!)LeetCode 2952. 需要添加的硬币的最小数量(贪心、数组)
    题目:2952.需要添加的硬币的最小数量思路:假设区间[1,s-1]的数都可组合得到,当遍历到x=coins[i]时,1、当x<=s时,可以组合的数就是区间[1,s-1]和区间[x,s-1+x]的交集,即区间[1,s-1+x]2、当x>s时,区间[1,s-1]和区间[x,s-1+x]没有交集,那我就只能通过添加一个数来实现了。在这里......
  • leetcode题目总结
    前言本文为leetcode上的题目简单分析总结,仅作记录,欢迎提出建议,共同学习交流。 390.消除游戏列表 arr 由在范围 [1,n] 中的所有整数组成,并按严格递增排序。请你对 arr 应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步......