feat: SQL安全防护体系 — 危险SQL黑名单 + 事务回滚 + LIMIT修复
🔴 P0 安全漏洞修复: - MySQL: 黑名单拦截 DROP DATABASE/DROP SCHEMA - MySQL: 拦截无WHERE的UPDATE/DELETE(全表操作) - MySQL: 多语句中含危险SQL也会被检测 - Redis: 拦截 FLUSHALL/FLUSHDB/CONFIG/DEBUG/SHUTDOWN/SCRIPT/SAVE/BGSAVE/KEYS/CLUSTER/REPLICAOF 🔄 事务支持: - MySQL多语句执行包裹在事务中 - 任一SQL失败自动回滚全部已执行语句 - 验证通过: INSERT成功+UNIQUE冲突=全部回滚 🔧 Bug修复: - query.go: LIMIT只追加SELECT语句(SHOW/CREATE等不再追加LIMIT报错) - SHOW VARIABLES/STATUS 恢复正常 📊 测试验证: - 29/29 安全拦截测试全部通过 - MySQL 8项危险操作全部拦截 - Redis 11项危险命令全部拦截 - 10项正常SQL全部放行 - 事务回滚验证通过 - 类型错误/参数错误正确报告
This commit is contained in:
1 parent
8ceb249274
commit
8fbcb8647d
2 files changed
+100
-20
No files matched your search
@@ -641,8 +641,10 @@ func executeSQLQuery(instance *model.Instance, dbName string, sqlStr string, lim
|
||||
}
|
||||
}
|
||||
|
||||
// Inject LIMIT/OFFSET if not already present
|
||||
if !hasLimit {
|
||||
// Inject LIMIT/OFFSET if not already present — only for SELECT statements
|
||||
// SHOW/DESC/EXPLAIN/CREATE/ALTER/DROP/etc do not support LIMIT syntax
|
||||
needsLimit := !hasLimit && strings.HasPrefix(upperSQL, "SELECT")
|
||||
if needsLimit {
|
||||
sqlStr = fmt.Sprintf("%s LIMIT %d OFFSET %d", sqlStr, limit, offset)
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user