yakczh 发表于 2011-04-27 08:21

sprintf的格式符与单引号能防止大部分sql注入

本帖最后由 yakczh 于 2011-04-27 08:22 编辑

数值格式符


$arr=array('table'=>'user','username'=>'yak','salary'=>'3000 or 1=1');
extract($arr);


echo sprintf("update   %sset salary=salary+1000   where username=%s andsalary = %d",$table,$username,$salary);





对于字符串格式符加单引号

$arr=array('table'=>'user','username'=>'yak or 1=1','salary'=>'3000 or 1=1');
extract($arr);

echo sprintf("update %s   set salary=salary+1000where username='%s' andsalary > %d",$table,$username,$salary);


遗憾的是php没有perl的变量列表,不然就可以把整个$arr传给sprintf了,不用一个一个写了

surpass_li 发表于 2011-04-27 08:41

了解了。顶。。。

stabilization 发表于 2011-04-27 09:23

一般都这么干吧

stabilization 发表于 2011-04-27 09:24

一般都这么干吧

yakczh 发表于 2011-04-28 07:38

简单测试了下,sprintf是字符串连接的花的时间的一倍

字符串连接  2
sprintf         4
str_replace    10
eval(sprintf)   8
页: [1]
查看完整版本: sprintf的格式符与单引号能防止大部分sql注入