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))
更新时间 12/31/2024, 2:35:23 PM