JavaScript/Node.js中原生函数引用的安全序列化方案求助
问题背景
在JavaScript/Node.js中保存包含函数的对象时,常见方式是将函数序列化为字符串,但这种方法存在明显缺陷:
- 依赖
eval或new Function(),存在安全与性能隐患 - 无法处理原生函数引用,例如
Math.sin.toString()会返回以下内容,既无法执行,也无法还原为对原Math对象的引用:function sin() { [native code] }
待序列化的对象示例
{ hello: 'world', function1: () => {return 'this is a custom function';}, function2: Math.random, function3: Math.sin }
理想解决方案要求
- 尽可能避免序列化函数本身,转而保存环境中的变量引用,例如将
Math.sin保存为可还原为window['Math']['sin']的形式 - 不依赖
eval或new Function(),以提升安全性
补充说明
我会将数据保存到本地文件系统,而非发送至其他服务器,理论上也可使用JSON以外的格式(如JS文件、二进制文件),只需避免代码注入即可。该文件用于存储AI模型的超参数,其中可能包含类似tanh的原生数学函数。
内容的提问来源于stack exchange,提问作者Ood
相关产品推荐
相关产品推荐

