遇到的一个php过滤问题
2016-05-03 15:46
567 查看
在测试手工注入时发现一个比较有意思的问题;这个问题是关于php过滤器的;主要用到的代码段为filter_var($_GET['id'],FILTER_SANITIZE_STRING);
代码如下:
两次打印出来的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注入
代码如下:
//传值的连接 //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注入
相关文章推荐
- 利用tp框架做前后台分离
- php基础知识学习
- yiic命令输入php.exe出现不是内部或外部命令
- PHP内核探索
- PHP创建/删除/复制文件夹、文件
- php编译安装添加pdo_mysql.so扩展
- php设置编码格式的程序
- How To Install and Secure phpMyAdmin on Ubuntu 12.04(MySQL图形管理)
- phpstudy配置ssl
- php语法
- vsftp
- 关于PHP路径
- phpstorm 提示请配置PHP解释器的解决办法
- php统计字数函数
- phpcms+ucenter+discuz论坛整合教程
- PHP基础
- PHP分页原理+代码实现
- vsftpd增加ssl安全验证
- php 之 类,对象(三)多态性,函数重载,克隆
- PHP数据访问