关于SQL语句中where子句真假值判断

最近在帮老师做个项目中的一个小模块,是关于SQL语句中where子句真假值判断的。例如where 1=1就是真值,where 1=2就为假值,做这个的的目的是为了防止网站被SQL注入。当然情况很复杂,where 1+1=2,where 1 IN(1,2)这些都需要判断出来,而且中间还包括各种or 和and 连接。

总之,要求是写个函数例如checkSQL(),老师把where子句传递给我,我通过判断给出where子句的真假情况,返回一个bool类型的值。

目前还不知道如何做,不知道有没有人做过,希望有人能给点提示,谢谢。

作者: jj12345jj198999   发布时间: 2011-06-14

SQL code
if exists(select 1 where 1=2)
return 'true'
esle
return 'false'

作者: ssp2009   发布时间: 2011-06-14

貌似这个方式防止注入不太可取。

作者: maco_wang   发布时间: 2011-06-14

这样能够防止注入就好多了。。。

作者: AcHerat   发布时间: 2011-06-14

SQL code

---用函数恐怕比较困难,用带返回的存储过程
Create procedure checkSQL
@sqlstr varchar(8000),
@Check tinyint output
as
create table #tmp(a int)
insert into #tmp
exec('select 1 where '+@sqlstr)

if exists(select 1 from #tmp)
  select @Check=1
else select @Check=0
 
 
 
 Go
 
 declare @check tinyint
 exec checkSQL '1=2',@check output
 select @check 
 exec checkSQL '1=1',@check output
 select @check 

作者: X_0   发布时间: 2011-06-14

可以去看看精华帖子里面的SQL 注入专题

作者: fredrickhu   发布时间: 2011-06-14

Mark!

作者: patrickjiang   发布时间: 2011-06-14