You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron应用将源码存入SQLite后用new Function执行是否安全?

客户端存储回滚迁移代码的安全性分析与解决方案

你这种将回滚迁移代码存入客户端SQLite数据库,再通过new Function(sourceCodeTakenFromDatabase)()动态执行的做法完全不安全,核心风险和对应解决方案如下:

不安全的核心原因

  • 客户端SQLite数据库完全处于用户可控范围,任何人都可以通过SQLite编辑工具直接修改数据库中存储的代码内容,注入恶意逻辑(比如窃取本地敏感数据、删除用户文件等),一旦触发回滚操作就会执行这些恶意代码。
  • new Function的执行逻辑和eval高度相似,执行的代码拥有当前应用的全部运行权限,能访问应用可触及的所有本地资源、用户数据,一旦被篡改,危害极大。

适配回滚迁移场景的安全措施

1. 代码签名验证

在将回滚迁移代码存入数据库前,用你方的私钥对代码生成数字签名,存储时同时保存签名和代码。执行回滚操作前,先用应用内置的公钥验证签名合法性,只有签名匹配的代码才允许执行,从根源上防止代码被篡改。

2. 替换动态执行为结构化操作描述

放弃存储可执行代码,改为存储回滚操作的结构化数据。比如把回滚需要完成的数据库操作(如删除指定表、还原字段类型、插入历史数据)用JSON或自定义格式序列化后存入数据库。回滚时,应用读取这些结构化数据,通过内置的安全执行器完成对应的数据库操作,彻底避免动态执行未知代码的风险。

3. 加密存储代码(次选方案)

如果必须存储可执行代码,对存入数据库的源码用AES对称加密算法加密,密钥需做混淆处理后内置在应用中(避免反编译轻易获取)。执行前先解密代码,再进行签名验证,最后执行,大幅提高恶意篡改的门槛。

4. 隔离执行上下文

若无法避免动态执行,需严格隔离代码的运行权限:

  • 后端/桌面端环境:用沙箱模块(如Node.js的vm模块)创建隔离上下文,仅授予代码必要的数据库操作权限,禁止访问文件系统、网络、进程等敏感资源。
  • 前端环境:限制代码能访问的全局对象,禁止调用fetch、localStorage等敏感API,仅保留回滚所需的数据库操作能力。

内容的提问来源于stack exchange,提问作者alexpopocoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 14:52:10