您的位置:首页 > 编程语言 > PHP开发

遇到的一个php过滤问题

2016-05-03 15:46 567 查看
在测试手工注入时发现一个比较有意思的问题;这个问题是关于php过滤器的;主要用到的代码段为filter_var($_GET['id'],FILTER_SANITIZE_STRING);

代码如下:

//传值的连接
//index.php?id=1' and (select count(*) from msysobjects)>0 and '1'='1
$con = mysql_connect("127.0.0.1","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
//第一段代码
$id = $_GET['id'];
$sql = "select * from user where id='{$id}'";
//第二段代码
//$id = filter_var($_GET['id'],FILTER_SANITIZE_STRING);
//$sql = "select * from user where id='{$id}'";
echo $sql;

$sql = "select * from user where id='1' and (select count(*) from msysobjects)>0 and '1'='1'";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result))
{
var_dump($row);
}
mysql_close($con);


两次打印出来的sql语句都是一样的;如下:

select * from user where id='1' and (select count(*) from msysobjects)>0 and '1'='1'

但第一段程序报错,第二段程序可以正常查出结果;

PHP文档上也写的很模糊;最后把两次的sql打印出来,有了收获;

两次打印id的结果:

string '1' and (select count(*) from msysobjects)>0 and '1'='1' (length=54)

string '1' and (select count(*) from msysobjects)>0 and '1'='1' (length=70)

原来filter_var($_GET['id'],FILTER_SANITIZE_STRING);将“'”进行了编码转换成了Ƈ这样就截断了sql语句,使它能正常执行;在某些方面也避免了sql注入
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PHP过滤