php is_numberic函数产生sql注入漏洞怎么解决

发布时间:2020-09-27编辑:脚本学堂
本文介绍了php中is_numberic函数产生sql注入漏洞的解决方法,有需要的朋友参考下。

专题推荐:php防止sql注入

本节内容:
php is_numberic函数,sql注入漏洞。

一、is_numberic函数简介
is_numberic函数的结构
bool is_numeric (mixed $var)
如果 var 是数字和数字字符串则返回 true,否则返回 false。

二、函数是否安全

例子,检测此函数安全性。
 

复制代码 代码示例:
<?php
$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防止sql注入漏洞

如果再重新查询这个表的字段出来,不做过滤带入另一个sql语句,将会造成2次注入。

三、 总结
尽量不要使用此函数。
如果要使用这个函数,建议使用规范的sql语句,条件加入单引号,这样16进制0x31206f722031就会在数据库里显示出来,而不会出现1 or 1。

以上就是php is_numberic函数产生sql注入漏洞的原因与解决方法,与大家共享。