本节内容:
php is_numberic函数,sql注入漏洞。
一、is_numberic函数简介
is_numberic函数的结构
bool is_numeric (mixed $var)
如果 var 是数字和数字字符串则返回 true,否则返回 false。
二、函数是否安全
例子,检测此函数安全性。
以上代码片段,判断参数s是否为数字,是则返回数字,不是则返回0,然后带入数据库查询。(这样就构造不了sql语句)
把‘1 or 1' 转换为16进制 0x31206f722031 为s参数的值
程序运行后,查询数据库看看,如下图:
如果再重新查询这个表的字段出来,不做过滤带入另一个sql语句,将会造成2次注入。
三、 总结
尽量不要使用此函数。
如果要使用这个函数,建议使用规范的sql语句,条件加入单引号,这样16进制0x31206f722031就会在数据库里显示出来,而不会出现1 or 1。
以上就是php is_numberic函数产生sql注入漏洞的原因与解决方法,与大家共享。