关于php必须谨慎处理变量和调用内置函数的几点总结,否则会带来安全方面的灾难

原创 2016年08月30日 09:30:58

由于PHP是弱类型脚本语言,对变量的数据类型没有限制,你可以在任何地时候将变量赋值给任意的其他类型的变量,同时变量也可以转换成任意地其他类型的数据。因此,从现在开始,你必须认真、严谨、缜密的处理你的变量,否则,一旦项目上线运行,出现的bug将是致命的,甚至你都无法溯源!

第一个:变量比较

基于PHP在比较的两个变量不匹配的时候,会自动地进行变量转换。由于其自身宽松的变量类型的原因,导致在进行类型转换的时候会存在很多意想不到的结果。

例如:$var1 == $var2 的判断

$var1 = null;  $var2 = false; //其比较结果布尔值为true
$var1 = '';    $var2 = null;  //其比较结果值true
解决该问题的办法是使用比较运算符‘===’(全等) 判断。即既比较数值,又比较类型!

与以上类似的情况还有这些:

0=='0'		//true
0 == 'abcdefg'	//true
0 === 'abcdefg'	//false
1 == '1abcdef'	//true
第二个:强制类型转换方面
转换主要就是int转换为string,string转换为int。
string 转 int 的函数为 intval()
int 转string的方法有两种:1.强制类型转换 (string)$var_tmp;  2.使用函数 strval();
说明intval()转换的时候,会将从字符串的开始进行转换知道遇到一个非数字的字符。即使出现无法转换的字符串,intval()不会报错而是返回0。
第三个:内置函数参数的松散性
内置函数的松散性说的是,调用函数时给函数传递函数无法接受的参数类型,部分只是产生警告,并不会产生致命错误,程序仍然执行的情况!
a.    md5()加密函数
$array1[] = array(
    "foo" => "bar",
    "bar" => "foo",
);
$array2 = array("foo", "bar", "hello", "world");
var_dump(md5($array1)==var_dump($array2));	//true
b.     strcmp() 字串比较函数
$array=[1,2,3];
var_dump(strcmp($array,'123')); //null,在某种意义上null也就是相当于false
c.    switch()分支判断
如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型。如下:
$i ="2abc";
switch ($i) {
case 0:
case 1:
case 2:
    echo "i is less than 3 but not negative";
    break;
case 3:
    echo "i is 3";
}
d.   in_array()这个比较常用,一定注意
$array=[0,1,2,'3'];
var_dump(in_array('abc', $array));  //true
var_dump(in_array('1bc', $array));	//true
因此,我们要严格判断时,应加上第三个参数,正确使用如下:
$array=[0,1,2,'3'];
var_dump(in_array('abc', $array,true));  //false
var_dump(in_array('1bc', $array,true));	//false
拿出以上案例,借此抛砖引玉,可见没有正确处理变量和调用内置函数的可怕了吧?从现在开始,养成一个良好的习惯,对于内置函数,做到了解函数原型及各参数的意义;对于变量,进行判断时,一定要考虑类型自动转换的因素,来确定是否使用 == 或者是 === , !=  或者是 !== 。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于php面向对象继承方面的几点总结

本文主要总结几点php面向对象继承时的几点: //people.class.php class People{ private $name; private $sex; private...

在smarty中调用php的内置函数

在smarty中调用php的内置函数: 相信很多人都不是很很了解smarty的一个重要功能,就是能在smarty模板里面调用php的内置函数. 模板书写: {'param1'|func...

php 内置函数大全

  • 2016-02-15 16:53
  • 52KB
  • 下载

PHP内置函数大全

  • 2013-03-14 15:23
  • 52KB
  • 下载

php 内置变量和常量

$GLOBALSvar_dump($GLOBALS);//一个封装了所有在脚本中的全局变量的数组,包括php内置的和我们自己声明的$_GEThttp://www.dadishe.com/test/ch...

PHP内置函数大全

  • 2012-09-24 17:30
  • 52KB
  • 下载

PHP 中使用 Smarty 之五:Smarty 内置变量调解器

Smarty 中的变量调解器相当于函数,其调用方式为:通过 "|" 后面直接跟调解器函数名,如果有参数,得加在 ":" 后面,多个参数的话,累加即可。 下面为您介绍 Smarty 中内置的变量调解器...

shader内置变量和函数

shader内置变量和函数(转)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)