关于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类型的值。
目前还不知道如何做,不知道有没有人做过,希望有人能给点提示,谢谢。
总之,要求是写个函数例如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