php的强弱类型比较

强类型比较

特点

1、使用三个 ''==='' 表示;

2、比较值,也比较类型;

3、先判断a,b类型,若相同,则比较值,若不相同,则返回false

强类型的绕过(有两种):

1、使用md5值完全相同的值绕过;

$a=$_GET['a'];

$b=$_GET['b'];

md5($a)===md5($b)

2、使用数组绕过

弱类型比较

特点

1、使用两个 ''=='' 比较;

2、只比较值,不比较类型;

3、a==b   将a,b的值转换成同类型再比较值

弱类型的比较主要是字符型和数字型的比较

1.字符型和字符型比较,数字型和数字型比较

这两个为同类型,直接比较其内容是否相同

2、字符型和数字型比较

        若字符型值开头为数字,转为数字;

        若开头不为数字,为 null 弱比较与 0 相等。

              例:''abc123''==123 => false
                 ''abc123''==0 => true
                "123abc"==123 => true

3、布尔值true和任意字符串和数值比较

        布尔值true和任意字符串和数值比较都弱相等,除了0和false,因为0也认为是bool false,true是不等于false的

弱类型的绕过

0e绕过

以0e为开头的字符无论后面跟什么值,都是0

又因为MD5加密后的值也为0,比如明文s155964671a;密文0e342768416822451524974117254469

所以很多时候,我们可以构造以0e为开头的经过md5加密的值,来绕过弱类型比较

比如:

$a=$_GET['a'];

$b=$_GET['b'];

md5($a)==md5($b)

也可以根据它本身的特点绕过

比如:

$passwd=1234567a
$passwd==1234567

这是常见的,以0e为开头的md5的原文和密文

常见的MD5碰撞:md5值为0e开头_0e md5-CSDN博客

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值