php面试如何理解弱类型,php弱类型总结

x01:“==”和“===”

PHP中有两种比较符号,“==”与“===”。“==”我们称之为等值符,当等号两边为相同类型时,直接比较值是否相等;当等号两边类型不同时,先转换为相同的类型,再对转换后的值进行比较,如果比较一个数字和字符串或者涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照常数值进行比较。

var_dump("admin"==0); //true

var_dump("1admin"==1); //true

var_dump("admin1"==1) //false

var_dump("admin1"==0) //true

var_dump("0e123456"=="0e4456789"); //true

?>

当一个字符串欸当作一个数值来取值,其结果和类型如下:如果该字符串没有包含'.','e','E'并且其数值值在整形的范围之内

该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

0x02:"array_search"与is_array"绕过is_array:判断传入的是不是一个数组,array_search(x,$数组):在数组中寻找与指定值(x)相等的值,array_search函数 类似于"==",会进行类型的转换

if(!is_array($_GET['test'])){exit();}

$test=$_GET['test'];

for($i=0;$i

if($test[$i]==="admin"){

echo "error";

exit();

}

$test[$i]=intval($test[$i]);

}

if(array_search("admin",$test)===0){

echo "flag";

}

else{

echo "false";

}

?>

在上面的栗子中,我们可以传入test[]=0来进行绕过,首先test是一个数组,符合is_array的判断,然后test=0;在array_search中0==admin为true,绕过了array_search。

0x03:strcmp漏洞绕过strcmp是比较两个字符串,str1str2,返回>0,相等时返回等于0

1 <?php

2 $password="***************"

3 if(isset($_POST['password'])){

4

5 if (strcmp($_POST['password'], $password) == 0) {

6 echo "Right!!!login success";n

7 exit();

8 } else {

9 echo "Wrong password..";

10 }

11 ?>

上述代码中要求我们post一个password值,要与给定的password变量的值相等,但我们不知道password变量的值是什么!这怎么办呢?

stamp期望传入的值是字符串类型,但如果我们传入数组类型会怎么样呢?

我们传入 password[]=xxx 可以绕过 是因为函数接受到了不符合的类型,将发生错误,但是还是判断其相等

https://www.cnblogs.com/liangxiyang/p/10925792.html

原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/archives/1011

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值