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

如何对sql.js输入做安全校验,防范Electron应用的SQL注入风险?

sql.js 防SQL注入的正确实现方式

直接用sql.js内置的**参数绑定(预处理语句)**功能即可从根源避免SQL注入,不要手动拼接用户输入到SQL语句中。

正确写法示例

sql.js的db.run()方法支持两种传参格式,会自动对输入值做转义处理:

1. 数组形式传参

按SQL语句中占位符的顺序传值即可:

const SQL = await sqljs();
const db = new SQL.Database();

let id = 1;
let name = 'row name';

// 用?作为占位符,第二个参数传入值的数组
db.run(`INSERT INTO tableName VALUES (?, ?, ?);`, [id, name, 'hello']);

2. 命名参数形式传参

如果参数较多易混淆,可以用命名占位符(支持@、$、:前缀),传入对象绑定参数:

db.run(`INSERT INTO tableName VALUES ($id, $name, $extra);`, {
  $id: id,
  $name: name,
  $extra: 'hello'
});

额外安全建议

  • 不管参数类型是数字还是字符串,都统一走参数绑定,不要手动判断类型后拼接
  • 涉及动态表名、字段名的场景(参数绑定不支持表名/字段名占位),可以预先定义允许的表名/字段名白名单,用户输入值匹配到白名单内的内容才允许拼接,禁止直接把用户输入作为表名/字段名插入SQL语句
  • 严格控制Electron应用内数据库操作的权限,不要给前端渲染进程直接操作数据库的权限,所有数据库操作统一在主进程处理,渲染进程只传操作参数,主进程做参数校验后再执行SQL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:27:05