sql-guard
sql-guard
sql-guard 是一个SQL安全检测和条件注入库,支持mysql、postgres数据库的sql语法。
作用和使用场景
在textToSql的场景中,由大模型根据用户输入内容来生成sql,但平台无法保证和检测大模型输出sql的安全性。
sql-guard的功能
- 只检测select语句,任何其他类型的sql都会抛出异常,保证只能执行select语句
- SQL语法检测,当SQL语句有语法错误时,抛出异常
- 表范围检查,当SQL语句中操作了非指定范围的表时,抛出异常,确保sql语句只能操作指定范围的表
- Where条件注入,为所有SQL注入指定条件,确保sql语句只能查询指定条件内的数据
- 分页注入,为所有SQL注入指定分页条件,确保sql语句只能查询指定分页条件内的数据
示例
import {mysql,postgres} from "sql-guard"
//参数配置: 表限制、分页限制、where条件注入
let params={
//限制最大分页数量
limit:10,
//限制表范围
tables:{
"basicinfo.user":{
//条件注入
where:"$.name='123'"
},
"basicinfo.test":{
//条件注入
where:"$.userId='123'"
}
}
}
//原始SQL
let sql = "select * from basicinfo.user u join basicinfo.test t on x=1 where t.name='123' and u.s=31"
//输出:select * from basicinfo.user u join basicinfo.test t on x=1 where (t.name='123' and u.s=31) and (u.name='123') and (t.userId='123') limit 10 offset 0
console.log(postgres.inspect(sql,params))
//原始SQL
let sql2="select *,count(*) from basicinfo.test t where t.name like '%' limit 0,30"
//select *,count(*) from basicinfo.test t where (t.name like '%' ) and (t.userId='123') limit 0,10;
console.log(mysql.inspect(sql2,params))