在前端,传入任意合理的条件
比如:
id > 999 and name like '%abc%'
后端对语句进行语句进行拼接执行
SELECT * FROM `dbName`.`tabName`
id > 999 and name like '%abc%' LIMIT 0, 100
避免注入的可能
id > 999 and name like '%abc%'
,这并非完整的SQL,只是SQL的一部分
在拼接之前有着严格的语法检查,且是有类型的
仅仅支持简单的组合
left
必为后台中存在的属性名字
op
支持的操作符
right
要比较的符合要求的值
left op right
left op right and left op right
left op right and left op right and left op right ...
比如,我们传入 1 = 1 and c > 1
在后台实体中,我们根本没有定义一个叫做1的属性或者字段,它无法通过验证
比如,我们传入 id > '一二三'
在后台的实体中,存在id这个属性,类型为int
当'一二三' 被尝试转为int时,它无法通过验证
一些想得到的注意点
- 这种需求应该不太会在面向C端的时候出现
- 这会暴露数据表名
- 在后端对返回结果过滤,你也许不想返回一些敏感信息