加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP弱类型安全问题总结

发布时间:2016-09-06 18:51:21 所属栏目:PHP教程 来源:乘物游心
导读:在PHP中的特性就是弱类型,以及内置函数对于传入参数的松散处理。本篇文章主要就是记录我在做攻防平台上面遇到的PHP的函数中存在的问题,以及PHP的弱类型所带来的问题。

如果传入给出strcmp()的参数是数字呢?

  1. $array=[1,2,3];  
  2. var_dump(strcmp($array,'123')); //null,在某种意义上null也就是相当于false。 

strcmp这种特性在攻防平台中的pass check有考到。

switch()

如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类型。如下:

  1. $i ="2abc";  
  2. switch ($i) {  
  3. case 0:  
  4. case 1:  
  5. case 2:  
  6. echo "i is less than 3 but not negative";  
  7. break;  
  8. case 3:  
  9. echo "i is 3";  

这个时候程序输出的是i is less than 3 but not negative,是由于switch()函数将$i进行了类型转换,转换结果为2。

in_array()

在PHP手册中,in_array()函数的解释是bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ),如果strict参数没有提供,那么in_array就会使用松散比较来判断$needle是否在$haystack中。当strince的值为true时,in_array()会比较needls的类型和haystack中的类型是否相同。

  1. $array=[0,1,2,'3'];  
  2. var_dump(in_array('abc', $array)); //true  
  3. var_dump(in_array('1bc', $array)); //true 

可以看到上面的情况返回的都是true,因为’abc’会转换为0,’1bc’转换为1。

array_search()与in_array()也是一样的问题。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读