当前位置: 首页 > news >正文

字符串函数安全解析成执行函数

字符串函数安全解析成执行函数

可以通过创建沙箱环境(注入组件方法和工具函数)使用组件内部函数

// 组件安全函数解析器
function safeParseFunction(fnStr: string, context = {}) {if (typeof fnStr !== 'string') return fnStr;// 增强预处理:处理Vue模板中的转义字符const processedStr = fnStr.trim().replace(/\\n/g, '\n') // 转换转义换行符.replace(/\\t/g, ' ') // 转换制表符为空格.replace(/\\"/g, '"') // 处理转义引号.replace(/\r/g, '') // 移除回车符.replace(/\s+/g, ' '); // 压缩连续空格try {// 创建沙箱环境(注入组件方法和工具函数)const sandbox = {// 注入组件API...context,// 注入工具函数// 注入基础APIconsole,setTimeout,clearTimeout,setInterval,clearInterval// 其他需要注入的依赖...};// 重构函数构建逻辑(避免with语句作用域问题)const createExecutor = () => {const sandboxKeys = Object.keys(sandbox);// const sandboxValues = sandboxKeys.map((key) => sandbox[key]);// 动态生成函数参数列表const params = sandboxKeys.join(', ');// 构建函数体(三种格式统一处理)let fnBody = processedStr;if (fnBody.includes('=>')) {if (!fnBody.startsWith('(')) {fnBody = `(${fnBody})`; // 补全箭头函数括号}} else if (!fnBody.startsWith('function')) {fnBody = `function() { ${fnBody} }`; // 包裹普通函数体}// 生成可执行函数return new Function(params, `return (${fnBody}).apply(this, arguments)`);};// 执行并绑定上下文const executor = createExecutor();return (...args) =>executor.apply(sandbox, Object.values(sandbox).concat(args));} catch (error: any) {console.error('[函数解析失败]', {input: fnStr,error: error.message});return () => {};}
}// 测试用例(在组件中验证)   { emit, props }
const testFunction = safeParseFunction("()=>{\n console.log(11);\n setTimeout(()=>{console.log(12)},100);\n}");
testFunction(); // 应正常执行
http://www.dtcms.com/a/305318.html

相关文章:

  • AE、VAE与GAN简明指南:三大生成模型对比
  • 二维经验模态分解(BEMD)算法详解与MATLAB实现
  • 地图可视化实践录:开篇需求计划
  • SZU大学物理实验报告|基于应变片的电子秤的设计
  • Python爬虫分析B站番剧播放量趋势:从数据采集到可视化分析
  • 纯血鸿蒙 AudioRenderer+AudioCapturer+RingBuffer 实现麦克风采集+发声
  • 选用Java开发商城的优势
  • 功率场效应晶体管MOSFET关键指标
  • 岩石图文分析系统
  • Gartner发布2025年数据安全技术成熟度曲线:29项最新数据安全相关技术发展和应用趋势
  • 【SQL】Windows MySQL 服务查询启动停止自启动(保姆级)
  • 学习日志21 python
  • Sub-GHz射频技术,智能安防系统的“长续航、深覆盖”密码
  • 集成开发环境(IDE)
  • 卸油作业安全设施识别准确率↑32%:陌讯多模态融合算法实战解析
  • Layui表格备注编辑功能代码详解
  • NAT:网络地址转换
  • 开发避坑短篇(8):Java Cookie值非法字符异常分析与解决方案:IllegalArgumentException[32]
  • 前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局
  • redis得到shell的几种方法
  • Python包架构设计与模式应用:构建可扩展的企业级组件
  • 本土化DevOps实践:Gitee为核心的协作工具链与高效落地指南
  • Java 11 新特性详解与代码示例
  • 《C++》STL--vector容器超详细解析
  • CSS 在单页应用(SPA)中的适用性解析与实践
  • QWebEngineProfile setCachePath无效
  • aar, aab,apk三种应用格式的区别
  • Linux网络编程——IP地址与端口、通信协议、Socket套接字基础概念解析
  • 【C语言】指针深度剖析(一)
  • Router 动态路由