|
发表于 2021-1-17 14:26:18
|
显示全部楼层
河南省郑州市
各类数据库都存在这样一个问题.
如mssql,
原查询语句="select * from users where name like '%"+编辑框1.内容+"%'
正常情况下,我们在编辑框中输入"刘德华",查询语句会变成"select * from users where name like '%刘德华%',这样不会出现任何问题.
但如果是不良用户,在编辑框中输入"刘德华' or 1=1 --",这样查询语句直接等效于"select * from users",没有任何条件.
这样还好,不会造成危害.
但如果这个用户再坏一点,在编辑框中输入"';delete from users;delete from table...;--" 这下你惨了,指定的表数据都会被删除.
再有无意用户输入一个单引号"'",查询将直接失败.
还有通配符"%,_,*" 等等,查询出来的结果可能跟你想要的不一样.本来查"刘_华"的,可能"刘X华"全出来了.
通过子文本替换,把单引号换成双引号,在SQl里面是有效的,结构化,参数化查询都能解决一些上面的问题.
可惜易语言本身并不带参数化查询命令,需要我们自己写
sql语句="declare @aa char(5);set @aa='12345';select * from table where 条件=@aa"这样写,
啊,下班了,下午再接着来 |
|