Expand description
防全表 UPDATE/DELETE 攻击守卫(Safe SQL Guard)
对应文档 6.8 节改进项 26(防全表 UPDATE/DELETE 攻击拦截)。
§核心概念
- GuardPolicy:守卫策略,配置是否允许无 WHERE 子句的 UPDATE/DELETE
- SafeSqlGuard:守卫实例,对 SQL 进行检查并拦截危险操作
- GuardError:守卫错误类型
§设计灵感
- MyBatis-Plus
block-attack-inner-interceptor(阻止全表更新/删除) - MySQL
--safe-updates模式 - Hibernate
hibernate.query.mutation_strategy
§使用示例
use sz_orm_pool::guard::{SafeSqlGuard, GuardPolicy};
let guard = SafeSqlGuard::new(GuardPolicy::Strict);
// 拦截无 WHERE 子句的 UPDATE
assert!(guard.check("UPDATE users SET name = 'a'").is_err());
// 拦截无 WHERE 子句的 DELETE
assert!(guard.check("DELETE FROM users").is_err());
// 允许带 WHERE 子句的 UPDATE
assert!(guard.check("UPDATE users SET name = 'a' WHERE id = 1").is_ok());Structs§
- Safe
SqlGuard - 防全表 UPDATE/DELETE 攻击守卫
Enums§
- Guard
Error - 守卫错误类型
- Guard
Policy - 守卫策略
Type Aliases§
- Guard
Result - 守卫结果