php is_numberic函数造成的SQL注入漏洞

2014-03-10 40

一、is_numberic函数简介
国内一部分CMS程序里面有用到过is_numberic函数,我们先看看这个函数的结构
bool is_numeric (mixed $var)
如果 var 是数字和数字字符串则返回 TRUE,否则返回 FALSE。
二、函数是否安全
接下来我们来看个例子,说明这个函数是否安全。

$s = is_numeric($_GET['s'])?$_GET['s']:0;
$sql="insert into test(type)values($s);";  //是 values($s) 不是values('$s')
mysql_query($sql);

上面这个片段程序是判断参数s是否为数字,是则返回数字,不是则返回0,然后带入数据库查询。(这样就构造不了sql语句)
我们把‘1 or 1' 转换为16进制 0x31206f722031 为s参数的值
程序运行后,我们查询数据库看看,如下图:
php is_numberic函数造成的SQL注入漏洞
如果再重新查询这个表的字段出来,不做过滤带入另一个SQL语句,将会造成2次注入.
三、 总结
尽量不要使用这函数,如果要使用这个函数,建议使用规范的sql语句,条件加入单引号,这样16进制0x31206f722031就会在数据库里显示出来。而不会出现1 or 1。
展开阅读全文

更多Javascript文章

ExtJS判断IE浏览器类型的方法
Feb 10 45
WEB前端设计师常用工具集锦
Dec 09 33
jQuery实现HTML表格单元格的合并功能
Apr 06 49
JS实现css hover操作的方法示例
Apr 07 47
vue使用Font Awesome的方法步骤
Feb 26 58
es6函数之尾递归用法实例分析
Apr 25 39
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 41
手机访问当前页面